O que todo desenvolvedor deveria
saber sobre testes unitários
Thiago Bomfim
Slide 3
Slide 3 text
Sumário
●Teste unitário
●FIRST
●Nomenclatura dos testes
●Como identificar testes ruins
● Testes unitários na prática com Java (JUnit5,
Mockito, AssertJ, TestNG, Jqwik…)
Slide 4
Slide 4 text
Teste unitário
Teste unitário
01
Slide 5
Slide 5 text
Teste de software é uma atividade para assegurar que
o comportamento está conforme o esperado, e
também para identificar bugs proativamente.
Teste de Software
Teste unitário
Slide 6
Slide 6 text
Teste de Software
Teste unitário
Fonte: https://martinfowler.com/bliki/TestPyramid.html
Slide 7
Slide 7 text
Unit Test é uma técnica para testar a menor unidade
possível, de forma rápida e precisa.
Teste unitário
Teste unitário
Slide 8
Slide 8 text
● Maior segurança em manutenções e evoluções.
● Garantir um código mais conciso.
● Serve como uma documentação para os
desenvolvedores.
Benefícios
Teste unitário
Slide 9
Slide 9 text
“To me, legacy code is simply code without tests.”
― Michael C. Feathers, Working Effectively with Legacy Code.
Teste unitário
Slide 10
Slide 10 text
FIRST
FIRST
02
Slide 11
Slide 11 text
● Fast
● Independent
● Repeatable
● Self-validating
● Thorough/Timely
FIRST
FIRST
Slide 12
Slide 12 text
Quanto mais rápido melhor, então o ideal é não
depender de integrações externas, como acesso a
arquivos, internet, banco de dados…
FAST
FIRST
Slide 13
Slide 13 text
Um teste não pode depender de outro, deve poder
ser executado independente da ordem da execução.
Independent
FIRST
Slide 14
Slide 14 text
Independente da quantidade de vezes que ele for
executado, a saída dele deve ser a mesma.
Repeatable
FIRST
Slide 15
Slide 15 text
Cada teste precisa ter pelo menos uma assertiva
para validar a execução.
Self-validating
FIRST
Slide 16
Slide 16 text
Os testes precisam realizar uma cobertura de forma
minuciosa, buscando identificar todos os possíveis
cenários.
Eles também precisam ser feitos no momento
correto.
Thorough/Timely
FIRST
Slide 17
Slide 17 text
FIRST
Slide 18
Slide 18 text
Nomenclatura
Nomenclatura
03
Slide 19
Slide 19 text
“Given-When-Then”: Dado determinado contexto,
quando acontecer determinado acontecimento, deve
gerar determinado resultado.
Exemplo:
dadoUsuarioEstaLogadoQuandoClicarSairDeveraRem
overSessao();
Given-When-Then
Nomenclatura
Slide 20
Slide 20 text
“When-Then”: É comum também utilizar sem o
contexto.
Exemplo:
quandoUsuarioLogarDeveExibirTermosUso();
When-Then
Nomenclatura
Slide 21
Slide 21 text
“Should-When”: Deve gerar determinado resultado
quando acontecer alguma ação.
Exemplo: deveHaverDescontoAoComprarMuito();
Should-When
Nomenclatura
Slide 22
Slide 22 text
Qualidade dos testes
Como identificar se os
seus testes estão ruins
04
Slide 23
Slide 23 text
Se é necessário ter muitas linhas para criação de
objetos, há algo errado.
Setup Longo
Qualidade dos testes
Slide 24
Slide 24 text
Se houver objetos iguais sendo instanciados em
diferentes testes, há algo errado.
Setup Duplicado
Qualidade dos testes
Slide 25
Slide 25 text
Os testes feitos para o TDD devem ser rápidos.
Testes demorados
Qualidade dos testes
Slide 26
Slide 26 text
Testes que quebram inesperadamente, mostram que
a aplicação está com uma alta dependência.
Testes frágeis
Qualidade dos testes
Slide 27
Slide 27 text
“TDD helps you pay attention to the right issues at
the right time so you can make your designs cleaner,
you can refine your designs as you learn.”
-
― Kent Beck, Test Driven Development: By Example
Qualidade dos testes