Talking About TestingATT</>
Teste de Mutação com Jest e Stryker

Acerte 100% do quiz para continuar

Aula
Prévia gratuita

Por que a cobertura não basta

Execute os testes e veja 100% de cobertura em ambos os módulos, e então pergunte o que a cobertura não diz.

Você tem uma suíte que passa. A pergunta natural que uma equipe faz em seguida é: "quanto do código está testado?" A resposta usual é cobertura de código.

Medindo a cobertura

Execute o script de cobertura:

npm run test:coverage

Você verá uma tabela de cobertura, e aqui está a parte surpreendente: ambos src/leapYear.js e src/discount.js reportam 100% em todas as colunas, instruções, ramos, funções e linhas.

Somente pelos números de cobertura, os dois módulos são indistinguíveis. Ambos parecem perfeitamente testados.

O que a cobertura realmente mede

A cobertura de código responde a uma única pergunta, mecânica:

Esta linha foi executada enquanto os testes rodavam?

Isso é genuinamente útil. A cobertura encontra código que nenhum teste toca, e isso vale a pena saber.

Mas observe o que a cobertura não pergunta:

O resultado dessa linha foi alguma vez verificado?

Um teste pode executar uma linha e não afirmar nada de significativo sobre ela. Um teste pode percorrer um ramo em um valor seguro, mas nunca na fronteira onde um bug se esconde. Em ambos os casos, a linha fica verde no relatório de cobertura, e um defeito real pode estar bem ali embaixo.

👨‍🏫 Esta é a ideia central de todo o curso. A cobertura mede execução. Ela não mede verificação. Duas suítes com 100% de cobertura idêntica podem ter capacidades muito diferentes de pegar bugs.

A lacuna, tornada concreta

O módulo discount.js tem três fronteiras de regra de negócio e uma mensagem de erro. Os seus testes executam cada linha, então a cobertura é 100%. Ainda assim, como você verá, quatro pequenas alterações nesse código passam completamente despercebidas pelos testes. O selo de cobertura permanece verde enquanto o comportamento quebra silenciosamente.

O que precisamos é de uma forma de medir as asserções, não a execução. Essa medição se chama teste de mutação, e você a executará na próxima aula.

Visão geral dos comandos 📖

npm run test:coverage

Executa a suíte do Jest e reporta quanto do código-fonte foi executado pelos testes.

Sintaxe:

npm run test:coverage

Exemplo:

npm run test:coverage

Conteúdo sugerido 📚

Exercício 🎯

Execute npm run test:coverage e leia a tabela. Confirme que ambos os módulos reportam 100% de cobertura.

Depois, abra src/discount.test.js e, apenas lendo, tente identificar uma regra de negócio que é executada mas nunca é verificada na sua fronteira exata. Anote o seu palpite. Você o conferirá contra o relatório do Stryker em breve.

🙊 Os quatro pontos fracos são as fronteiras total < 0, total >= 100 e price < 50, além da mensagem de erro lançada para um total negativo. Não se preocupe se não pegou todos a olho nu, essa é justamente a questão.

Mostre ao mundo o que você aprendeu 🌎

Para mostrar à sua rede profissional o que você aprendeu nesta aula, publique o seguinte no LinkedIn.

Estou fazendo o curso "Teste de Mutação com Jest e Stryker" com @Walmyr Lima e Silva Filho na @Talking About Testing school, onde aprendi que a cobertura de código mede se uma linha foi executada, não se o seu comportamento foi verificado. #TalkingAboutTesting #TATSchool #MutationTesting #Testing

👨‍🏫 Lembre-se de me marcar na sua publicação. Aqui está o meu perfil no LinkedIn.

Quiz

Pergunta 1 de 2
Pontuação: 0

O que a cobertura de linha de fato mede?

Acerte 100% do quiz para continuar