Slide 1

Slide 1 text

A real importância de testes unitários e como fazê-los em elixir …

Slide 2

Slide 2 text

Sobre mim

Slide 3

Slide 3 text

Sobre testes… ● Os sistemas, funções e trechos de código, todos eles têm uma entrada e uma saída prevista/desejada. Para garantir que o sistema funciona corretamente são necessário testes, manuais ou automatizados, que verificam a entrada e saída, garantindo sua previsibilidade.

Slide 4

Slide 4 text

Sempre testamos? ● Sim… Sempre utilizamos testes sejam manuais (pelo cliente, testers ou mesmo pelo próprio desenvolvedor) ou automatizados (códigos testando códigos). ● Com a automatização dos testes, não temos mais somente uma ferramenta para detecção de bugs, temos um sistema com classes de teste que testam as classes do sistema.

Slide 5

Slide 5 text

Tipos de testes automatizados

Slide 6

Slide 6 text

Teste de unidades (teste unitário) ● Testes de unidade verificam automaticamente pequenas partes de um código, normalmente uma classe, apenas. Eles formam a base da pirâmide, ou seja, a maior parte dos testes estão nessa categoria. Testes de unidade são simples, mais fáceis de implementar e executam rapidamente.

Slide 7

Slide 7 text

Testes de integrações / serviços ● Testes de integrações ou testes de serviços, que verificam uma funcionalidade ou transação completa de um sistema. Logo, são testes que usam diversas classes, de pacotes distintos, e podem ainda testar componentes externos, como bancos de dados. Testes de integração demandam mais esforço para serem implementados e executam de forma mais lenta.

Slide 8

Slide 8 text

Testes de sistema / interface com o usuário ● Simulam, da forma mais fiel possível, uma sessão de uso do sistema por um usuário real. Como são testes de ponta a ponta (end-to-end), eles são mais caros, mais lentos e menos numerosos. Testes de interface costumam ser também frágeis, isto é, mínimas alterações nos componentes da interface podem demandar modificações nesses testes.

Slide 9

Slide 9 text

Por que testamos (sua real importância)? ● Provar que nosso código faz o que deve fazer (serve de documentação) ● Prevenir breaking changes ● Encontrar de maneira fácil onde nosso código quebra ● Escrever a menor quantidade de código de teste possível, sem comprometer com a qualidade dos testes

Slide 10

Slide 10 text

Estrutura de um teste unitário 1. Configuração (setup) 2. Exercício (exercise) 3. Verificação (verify) 4. Desconstrução (teardown)

Slide 11

Slide 11 text

Por que elixir para esta talk? ● Linguagem Funcional ● Linguagem brasileira (criada por José Valim) ● Já temos as configurações de testes pré-definidas ● Para conhecermos uma linguagem bacana de escrever e apta para sistemas de grande porte pois utiliza a VM do erlang, o que trás consigo uma série de vantagens como concorrência, paralelismo, tolerante a falhas, entre outras…

Slide 12

Slide 12 text

Por que elixir para esta talk? ● Linguagem Funcional ● Linguagem brasileira (criada por José Valim) ● Já temos as configurações de testes pré-definidas ● Para conhecermos uma linguagem bacana de escrever e apta para sistemas de grande porte pois utiliza a VM do erlang, o que trás consigo uma série de vantagens como concorrência, paralelismo, tolerante a falhas, entre outras…

Slide 13

Slide 13 text

Referências ● https://engsoftmoderna.info/cap8.html ● https://pragprog.com/titles/lmelixir/testing-elixir/ ● https://elixir-lang.org/docs.html ● https://hexdocs.pm/ex_unit/1.12/ExUnit.html ● https://elixirschool.com/en/

Slide 14

Slide 14 text

Let’s code…