Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

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

Slide 28

Slide 28 text

Prática 05 Prática

Slide 29

Slide 29 text

Prática Setup

Slide 30

Slide 30 text

Prática Teste Unitário & Nomenclatura (JUnit5)

Slide 31

Slide 31 text

Prática Teste Unitário para erros (AssertJ)

Slide 32

Slide 32 text

Prática Mock (Mockito)

Slide 33

Slide 33 text

Prática Concurrent Test (TestNG)

Slide 34

Slide 34 text

Prática Property-based Test (jqwik)

Slide 35

Slide 35 text

Github: https://github.com/ThiagoBfim/testsoftware Prática Prática

Slide 36

Slide 36 text

Recapitulando Recapitulando 06

Slide 37

Slide 37 text

Recapitulando ●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 38

Slide 38 text

Recapitulando “Se deixar os testes degradarem, seu código também irá. Mantenha limpos os seus testes.” ― Robert C. Martin, Clean Code

Slide 39

Slide 39 text

Clean Code A Handbook of Agile Software Craftsmanship - Robert Cecil Martin Recapitulando

Slide 40

Slide 40 text

Test Driven Development: By Example - Kent Beck Recapitulando

Slide 41

Slide 41 text

Working Effectively with Legacy Code - Michael C. Feathers Recapitulando

Slide 42

Slide 42 text

https://www.linkedin.com/in/thiagobfim/ https://github.com/ThiagoBfim Recapitulando

Slide 43

Slide 43 text

No content