pull request, ele terá um indicativo de tamanho, de acordo com as regras abaixo: - até 5 arquivos: tamanho P - até 15 arquivos: tamanho M - até 30 arquivos: tamanho G - mais de 30 arquivos: tamanho GG
dependências externas são mockadas • Integração: a nível de camadas, dependências de camadas que não são o alvo de teste, são mockadas • Sistema/Aceitação: a nível do SUT (system under test), simulando um consumidor e sem mocks Vamos falar sobre Testes? Unitário Integração Sistema
testes Handlers Commands Entities Domain Services Infra Services Repositories Microservice Unit Integration System Com o banco de dados Com a API de testes ou com a API mockada (ex: subindo uma instância dummy dela localmente)
◦ Pelos módulos/partes mais críticas ou que dão maiores problemas/manutenção • Sistema novo: ◦ Pelos módulos mais estáveis, em questão de definição de negócio
de integração, para diminuir a complexidade dos testes e torná-los mais objetivos • Uma extensiva dependência de mocks e principalmente, de mais de um mock, é um “smell” que nossa implementação está muito acoplada Mocks
sendo executados • Uma primeira métrica e ferramenta para testar melhor, respondendo a pergunta, quais códigos não estão sendo testados? (mas não o inverso - ???) • 100% de cobertura não é o mais importante (ex: o Coverage.py tem 94%) Cobertura de testes
os testes são apenas um resultado do seu uso • Uma das práticas ágeis mais difíceis de aplicar ◦ Não temos fluência no ferramental de testes e testes em si ◦ Não temos ideia da implementação ▪ Seja por questões arquiteturais ▪ Ou por indefinições de negócio
recomendação é quando o código a ser criado possui uma lógica complexa e conhecida (ex: algoritmos de validação e parse) • Lembre-se: ◦ Não usar TDD !== de não testar ◦ A criação de testes automatizados deve fazer parte do conceito de done do time
teste modificar apenas o que for necessário para o teste (ex: um atributo de status) • Teste ser atômico ◦ Tudo que precisa de entrada, deve ser criado no teste, ou no before, e após a execução remover o que foi criado, usando o after • Testar a interface não a implementação Check-list para um bom teste
testes ◦ Nome do teste deve seguir o padrão: “[ocorre comportamento X] [no estado Y]”, sempre tentando pensar mais no cenário de negócio, do que nos detalhes da implementação • Realizar assertions específicas ◦ A assertion tem que ser o mais profunda for possível. Podendo realizar mais uma assert por teste (do mesmo ouput), onde é recomendado a profundidade ir aumentando a cada assert, portanto, se tivemos 3 assertions no mesmo teste, a última será a mais profunda Check-list para um bom teste
mocks (de preferência não usar) ◦ Muitos mocks = implementação está muito acoplada ◦ Não mockar o que não te pertencer, ou o que for alvo do teste ◦ Não implementar detalhes de implementação nos mocks Check-list para um bom teste