Upgrade to Pro — share decks privately, control downloads, hide ads and more …

O que todo desenvolvedor deveria saber sobre te...

O que todo desenvolvedor deveria saber sobre testes unitários

A importância da criação de testes unitários no desenvolvimento de software não é nenhuma novidade, e isso já deveria ser comum em todos os projetos. Entretanto, será que os testes criados são de qualidade? Será que seguem boas práticas?

Quem nunca precisou arrumar um bug e levou mais tempo ajustando o teste do que a correção, ou precisou ignorar um teste que não retorna sempre o mesmo resultado?
Quem nunca leu e releu o teste diversas vezes para entender qual era o propósito?

Essas e diversas outras situações podem acontecer se os seus testes não forem claros e coesos. Venha aprender como identificar testes ruins, e como aplicar algumas boas práticas para criação de testes eficientes e fáceis de manter.

Thiago

June 15, 2023
Tweet

More Decks by Thiago

Other Decks in Technology

Transcript

  1. 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…)
  2. 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
  3. Unit Test é uma técnica para testar a menor unidade

    possível, de forma rápida e precisa. Teste unitário Teste unitário
  4. • 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
  5. “To me, legacy code is simply code without tests.” ―

    Michael C. Feathers, Working Effectively with Legacy Code. Teste unitário
  6. 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
  7. Um teste não pode depender de outro, deve poder ser

    executado independente da ordem da execução. Independent FIRST
  8. Independente da quantidade de vezes que ele for executado, a

    saída dele deve ser a mesma. Repeatable FIRST
  9. 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
  10. “Given-When-Then”: Dado determinado contexto, quando acontecer determinado acontecimento, deve gerar

    determinado resultado. Exemplo: dadoUsuarioEstaLogadoQuandoClicarSairDeveraRem overSessao(); Given-When-Then Nomenclatura
  11. “Should-When”: Deve gerar determinado resultado quando acontecer alguma ação. Exemplo:

    deveHaverDescontoAoComprarMuito(); Should-When Nomenclatura
  12. Se é necessário ter muitas linhas para criação de objetos,

    há algo errado. Setup Longo Qualidade dos testes
  13. Se houver objetos iguais sendo instanciados em diferentes testes, há

    algo errado. Setup Duplicado Qualidade dos testes
  14. Testes que quebram inesperadamente, mostram que a aplicação está com

    uma alta dependência. Testes frágeis Qualidade dos testes
  15. “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
  16. 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…)
  17. Recapitulando “Se deixar os testes degradarem, seu código também irá.

    Mantenha limpos os seus testes.” ― Robert C. Martin, Clean Code