Acerte 100% do quiz para continuar
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:coverageVocê 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:coverageExemplo:
npm run test:coverageConteú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 fronteirastotal < 0,total >= 100eprice < 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
O que a cobertura de linha de fato mede?
Acerte 100% do quiz para continuar