Em geral
Quando você tem testes automáticos suficientes para confiar no seu pipeline de integração contínua?
A resposta provavelmente fica clara se você pensar no que deseja confiar. Por fim, ele mapeia 1-1; todo teste deixa você confiante sobre a única coisa que ele testa:
- O teste de unidade dá a você a confiança de que uma classe (ou módulo) faz o que é testado.
- O teste de integração dá a você a confiança de que várias unidades trabalham juntas da maneira que são testadas.
- O teste de ponta a ponta dá a você confiança de que todo o aplicativo faz uma determinada coisa, da maneira como é descrito no teste.
Pela maneira como formulou sua pergunta, você provavelmente está pensando em um cenário geral de negócios agora, por exemplo:
Eu quero ter certeza de que meu aplicativo pode fazer X .
Então, você escreve um teste de ponta a ponta que tenta fazer o X e verifica se faz isso corretamente.
Mais concreto
Tudo isso é muito auto-referencial, mas é por isso que tudo se resume. Simplesmente não existe mais.
Por exemplo, imagine que você escreva um aplicativo para criar receitas de culinária. Uma característica é que, se você adicionar quantidades diferentes de vários tipos diferentes de queijo, ele fornecerá a temperatura e o tempo corretos para que todos derretam.
Assim, você pode escrever um teste de unidade para o seu CheeseMeltCalculator
, onde você administra 100g de queijo Gouda e 200g de Emmental e depois verifica se a temperatura e o tempo estão certos. Isso significa que agora você pode ter certeza de que CheeseMeltCalculator
funciona para 100g de queijo Gouda e 200g. Agora, se você repetir este teste com 300g de Gouda em vez de 200g, pode ter certeza de que ele funciona corretamente para valores diferentes. Você pode adicionar testes para 0
, -1
e int.MaxValue
g de Gouda para ter certeza de que o código não tropeçar (ou excursões corretamente como pretendido) para a entrada de estranhos.
Você pode escrever um teste de integração para verificar se CheeseMeltCalculator
está incorporado corretamente em todo o processo de cálculo de temperatura e tempo dos alimentos. Se isso der errado, mas os CheeseMeltCalculator
testes acima estiverem corretos, você pode ter certeza de que o erro está em outras calculadoras ou na maneira como os dados de diferentes calculadoras são combinados.
E, finalmente, você pode escrever um teste de ponta a ponta para criar uma receita inteira, e uma das coisas que você verifica é a temperatura e o tempo do resultado. Se os dois níveis anteriores de testes estiverem corretos, mas não der certo, então você pode ter certeza de que essas peças estão corretas e o erro é sobre como o cálculo da temperatura é integrado ao aplicativo. Por exemplo, talvez a entrada do usuário não seja transferida corretamente.
E , finalmente , se todos esses testes estiverem corretos , você pode ter certeza de que " se você adicionar quantidades diferentes de vários tipos diferentes de queijo, ele fornecerá a temperatura e o tempo corretos para que todos derreta "
Longa história curta
O ponto é que você não pode ter um teste "funciona corretamente". Você só pode testar "Se eu fizer X, Y acontecerá".
No entanto, é exatamente isso que deve constar nas especificações técnicas do projeto. Uma declaração como " se você adicionar quantidades diferentes de vários tipos diferentes de queijo, fornecerá a temperatura e o tempo corretos para que todos derreterem " não apenas dará ao cliente expectativas claras sobre o que o produto acabado fará, mas também poderá ser transformado em testes automatizados.
informação adicional
O usuário Richard adicionou essas informações em uma edição:
Martin Fowler tem um resumo muito bom em seu site sobre as estratégias mais comuns: https://martinfowler.com/articles/microservice-testing/
Não quero remover isso, mas quero dizer o seguinte: Comparado a esta resposta, não é um "resumo", mas uma explicação muito mais aprofundada, com bons gráficos e tudo mais.
Meu conselho seria: se tudo fizer sentido para você depois de ler minha resposta, está feito. Se as coisas ainda não estiverem claras, reserve um pouco de tempo e leia o artigo vinculado.