Lawrence_elixir

Lawrence_elixir

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.

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.

Most Liked

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.

Where Next?

Popular in Talks Top

axelson
ElixirConf US 2018 – Introducing Scenic - A Functional UI Framework – Boyd Multerer (@boydm) After years of...
New
New
axelson
ElixirConf 2017 - Working with legacy databases in Ecto - @geo Often when starting an Elixir or Phoenix proj...
New
kokolegorille
Lonestar Elixir 2018 videos are starting to pop up :slight_smile: https://www.youtube.com/channel/UCOy-_b9bqjokoWX9Hg5ZgUg Day 1 Chris ...
New
axelson
Here’s today’s talk: ElixirConf 2017 - Don’t Write Macros But Do Learn How They Work - by @jessejanderson ...
New
axelson
ElixirConf 2017 - Day 2 Morning Keynote - @josevalim All talks are available in the Elixir Conf 2017 Talks Li...
New
axelson
ElixirConf 2017 - The Power of Zero - Andrew Forward Automation is hard, but the benefits can be phenomenal....
New
axelson
by @zacky1972 Finally, we’ve succeeded in the implementation of Hastega!!! (Maybe until ElixirConf US 2019 :slight_smile: Hastega (Hyp...
New
axelson
ElixirConf US 2018 – Building Video Chat with Elixir & Phoenix – Anil Wadghule (@anildigital) In this t...
New
AstonJ
Keywords: LiveView autocomplete, LiveView search, focus Startups and web developers take note. Phoenix LiveView is the revolutionary fr...
New

Other popular topics Top

danschultzer
None of the current solutions worked well for me, so I went ahead and built a user management system from scratch. This project took far...
548 29603 241
New
lessless
I believe there are people here who are dealing with CSV files import on the daily basis, and since Excel is a really popular tool there ...
New
minhajuddin
I have seen a lot of code which picks the first element from a list using Enum.at(0) instead of List.first. Is there a reason why people ...
New
freewebwithme
Using vs code and installed ElixirLS: support and debugger. And I got an error popped up on start up says Failed to run ‘elixir’ comma...
New
nobody
Hi! In PHP: $_SERVER[‘SERVER_ADDR’] - in Elixir? Searched the docs for ip address and the web, no good results. Thanks!
New
ashish173
I am using Ecto timestamps with postgres, I can see the timestamps() use the :naive_dateime but for my use case I wanted to store the ti...
New
rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list. ...
New
PeterCarter
There are pre-rolled solutions for other frameworks that do work. However, Phoenix does not seem to have these. Have people had good expe...
New
sergio
Kind of like when jquery came out, it was super necessary. Existing drag and drop libraries have a bunch of baggage to support old browse...
New
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New

We're in Beta

About us Mission Statement