Na pirâmide de teste End-to-End (E2E), os testes ocupam um dos degraus superiores. Ao escrever um teste E2E, você pode ter certeza dos resultados da lógica de sua aplicação, testar integrações com outros sistemas e criar um "contrato" para sua aplicação.
Infelizmente, muitos dos colegas com quem trabalhei não escreveram testes E2E. Em parte porque eles se precipitaram nos testes de unidade e acharam que era melhor por vários motivos, incluindo a tendência TDD. Em parte porque eles acreditaram que os testes E2E são difíceis de escrever, eles demoram muito para serem executados e há problemas com a instrumentação.
Vamos analisar essas opiniões e ver os prós que o teste E2E oferece.
Terminologia
Vamos colocar o tipo de autoteste em testes E2E. Esses autotestes devem abranger todas as funções do serviço do ponto de vista do cliente. Eles fazem isso simulando a interação real do cliente, seja uma solicitação HTTP ou clicando em um botão na IU.
A abordagem de teste de unidade é melhor
Escrever testes de unidade, em minha experiência, leva muito mais tempo do que os testes E2E. Sim, primeiro você precisa descobrir como escrever testes E2E melhor, mas o mesmo vale para os testes de unidade.
Por outro lado, como resultado, um teste E2E cobre mais código do que um teste de unidade, embora possa levar menos linhas em comparação com um conjunto de teste de unidade semelhante.
Você não precisa perder tempo entendendo como simular dependências corretamente, porque os sistemas externos os tornam nos testes E2E, e a interação com o serviço em teste é construída de acordo com o princípio da "caixa preta".
Você não precisa verificar todas as condições de contorno para um único método de classe. Isso aumenta a flexibilidade de trabalhar com o código, pois não há necessidade de refatorar todo o conjunto de testes à menor alteração na lógica interna do aplicativo.
, , 100 ( ), .
backend- , API HTTP ( GraphQL) MQ. HTTP, mainstream .
Frontend- , , Web- () . , , , .
E2E , . . .. . , .
E2E
, , .
"" code-coverage. , , , , . exception, , ?
, E2E .
E2E API . , backend, E2E , , frontend .
, , E2E , unit-, .
! , E2E ?