Lawrence_elixir

Lawrence_elixir

@dcaixinha - Software Engineer, author and Meetup co-organiser

A Whirlwind Tour of Testing in Elixir

Talk in three words: Write maintainable tests.

Abstract
Tests are an integral part of any application. They are a safety net to refactor applications and also great living documentation. Beginning with unit tests, we’ll see how to write thorough but also maintainable tests, and how the key to do so is to focus on the message-passing. Moving up the pyramid, we will then go through end-to-end tests, but also component and contract tests. These last two are becoming increasingly important, since it’s hard to maintain end-to-end tests in microservice architectures.

Objectives
The objectives of this talk are three-fold:

  • discuss some best practices for testing Elixir applications;
  • show how to create unit tests that are descriptive and maintainable, while also avoiding redundant coverage;
  • explore service-level and end-to-end tests, and demonstrate how the former helps in the maintainability of the latter.

Audience
This talk should appeal to anyone writing Elixir applications, regardless of the domain. Testing is a cross-cutting concern, and the principles discussed in this talk will apply to pretty much all areas of development, whether it’s a web application or an embedded system.
Read the full abstract:

The speaker
Daniel Caixinha is a software engineer at Onfido, where he is using Elixir to build resilient systems that can handle the high growth of the business. After graduating from Instituto Superior Técnico, he joined the startup world, mainly using Ruby, but he also got the chance to play around with Elixir. Upon joining Onfido, he got the chance to take Elixir more seriously, which made him fall in love with functional programming in general, and Elixir in particular. Besides building Elixir applications, he is fostering the use of Elixir, and being a co-organiser of the Lisbon Elixir meetup.

All will be added to the ElixirConf EU 2019 Talks List or via the #elixirConfEU2019 tag.

Showing Posts 1 to 2

Fl4m3Ph03n1x

Fl4m3Ph03n1x

What an interesting talk!
And I think he may even be Portuguese (orly?) !!

I have so many questions:

  1. what is his stance on behavioral testing?
  2. does he start inside out or outside-in?
  3. what is his take on DDD?
  4. what type of layered architecture does he use in his apps?
  5. When doing unit tests, does he create a behaviour for every unit he is testing? (because th SUTs are supposed to communicate with the collaborators via interfaces so Mox can take advantage of them)
  6. Why doesn’t he mention constructor dependency injection of the witness pattern?

Really wish I could have a talk with him. Also, really wish I could have a calendar for the next events, he did mention they occur monthly iirc.

dcaixinha

dcaixinha

Hey @Fl4m3Ph03n1x, sorry for taking so long to respond, somehow I didn’t get notified for this thread. Yes I’m indeed Português :portugal: Trying to answer your questions:

  1. By behavioral testing you mean BDD? If so, I’m not against it, I just feel that they aren’t scalable and should be created taking this into consideration.
  2. I usually start inside-out, but this heavily depends on the codebase and whether I’m familiar with it or not!
  3. I can’t say I know much about DDD. I’ve just experimented with the Bounded Contexts that Phoenix encouraged, but I haven’t really developed an application where that is followed consistently.
  4. I usually tend to create something along the lines of the Clean Architecture or the Hexagonal Architecture.
  5. Yeah, I do! For every mock that I need, I go and create a behaviour that establishes the contract of that module. Note that you don’t need to create a separate module for this, as you can do it inline on the original module.
  6. I don’t know what you mean by that :sweat_smile: In the talk I mention dependency injection, which is what I used to inject the mocks on the test.

I’d be happy to discuss this in person :slight_smile: you can find the meetup page here, and our next edition was just announced, which is happening two weeks from now.

— All posts loaded —

Where Next? Top

Trending in Talks Top

ElixirConf
Elixir’s Configuration Layers: A Visual Journey - Stephanie Lane | ElixirConf US 2025 Comments welcome! View the <span cl...
New
ElixirConf
Leaving a BEAM cluster (basically) unattended for 2 years - Yuri Oliveira | ElixirConf US 2025 Comments welcome! View the...
New
ElixirConf
Introducing Elixir Observer - Juan Manuel Azambuja | ElixirConf US 2025 Comments welcome! View the <span class="hashtag-i...
New
ElixirConf
Beyond Safe Migrations: Better Practices for Ecto + PostgreSQL - Joe Harrow | ElixirConf US 2025 Comments welcome! View t...
New
ElixirConf
How LiveDebugger makes your life easier - Krzysztof Nalepa | ElixirConf US 2025 https://www.youtube.com/watch?v=MzvauYjQgdQ Comments w...
New
ElixirConf
Lightning Talk: Jacob Swanner - Put your Scaller (Named Correctly) | ElixirConf US 2025 Comments welcome! View the <span ...
New
CodeSync
Elevating Phoenix with OpenRiak - Robert Carbone | Code BEAM Europe 2025 Comments welcome! View the <span class="hashtag-...
New

Other Trending Topics Top

JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge &amp; Solve. They are GUI (Emerge) and State management (S...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
ausimian
Emily is an Elixir library that runs Nx computations on Apple’s MLX. Install it as the default Nx backend and Nx, defn, Axon, Nx.Serving,...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews