16) ElixirConf EU 2019 - A Whirlwind Tour of Testing in Elixir - Daniel Caixinha

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

A Whirlwind Tour of Testing in Elixir

Talk in three words: Write maintainable tests.

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.

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.

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.


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.


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.

1 Like