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

Testcontainers: Elevando o nível dos seus testes de integração

Andreia Silva
September 25, 2023

Testcontainers: Elevando o nível dos seus testes de integração

Apresentação realizada na Gophercon Edição 2023, em parceria com Vinitius Salomão.

Andreia Silva

September 25, 2023
Tweet

More Decks by Andreia Silva

Other Decks in Programming

Transcript

  1. 01 A real importância dos testes Agenda 02 Estratégias de

    teste 03 E onde entra o Testcontainers? 04 Testcontainers e Go 05 Demo Time! 06 Conclusão
  2. Anatomia do Desenvolvedor Agostinho Faz deploy na sexta-feira as 17

    hrs 1300 arquivos alterados em um único Pull Request Meu código é perfeito. Testar para quê? Desabilita o lint nos arquivos _test.go
  3. “Desenvolvedores profissionais testam seu código” The Clean Coder, Uncle Bob.

    “Os testes mostram a presença e não a ausência de bugs” Dijkstra.
  4. Não custa nada reforçar… Arquitete sua suíte de testes e

    os desenvolva com o mesmo zelo aplicado no código de produção Testes nos protegem de nossas próprias alterações. Testes aceleram o processo de desenvolvimento de software
  5. Estratégia, do grego estrategia Cone Pirâmide Ice Cream Cone Pyramid

    * Fonte das ilustrações: https://web.dev/ta-strategies/
  6. Mais uma do Uncle Bob. “The pyramid is based on

    the assumption that broad-stack tests are expensive, slow, and brittle compared to more focused tests, such as unit tests. While this is usually true, there are exceptions. If my high level tests are fast, reliable, and cheap to modify - then lower-level tests aren't needed.” Fonte: https://martinfowler.com/bliki/TestPyramid.html
  7. Testes de Integração O propósito dos Testes de Integração é

    validar se as unidades que compõem um fluxo funcionam quando conectadas. O que é mais valioso: Cobertura ou Qualidade? Testes de Integração ou de Unidade?
  8. Histórico Criado para gerenciar as dependências externas de Testes de

    Integração de maneira simples Testcontainers não é sobre “testar containers” mas “testar com containers”. É um projeto open-source iniciado em 2015 por Richard North
  9. Ainda não me convenceu. Afinal… Posso gerenciar as dependências dos

    meus testes com docker, sem o Testcontainers Posso usar uma base de dados in-memory para testar
  10. Testcontainers e Go A implementação provê portas randômicas, inicialização/remoção/cleanup dos

    containers. Conta com 2.4k estrelas no Github além de ser listado no awesome-go. Módulos!
  11. Módulos Mas e se não houver um módulo para a

    tecnologia que eu preciso? Os módulos disponíveis em Golang podem ser listados na documentação e incluem Postgres, MongoDB, Redis, K3s, WireMock (experimental) entre outros. Generic Container
  12. Mas e as migrations? E se houverem muitas dependências? Aposto

    que você deve estar se perguntando… docker-compose
  13. Ryuk Responsável pela remoção de recursos Docker criados durante a

    execução dos testes O Ryuk é um container auxiliar, iniciado automaticamente.
  14. • Simplicidade ◦ Na implementação, evolução e manutenção ◦ Na

    execução: tanto no CI/CD quanto localmente • Feedback rápido • Aumento da produtividade • Flexibilidade • Testes auto contidos • Conflitos de porta evitados • Paralelismo • Recursos como Waiting Strategies • Isolamento