Projeto simulando cenários de cobertura de teste unitários e utilização do pitest(teste de mutação) para analise dos testes unitários (efetividade, eficiência e/ou suficientes).
Uma aplicação onde são vendidos vários produtos seguindo as seguintes regras:
Se comprar menos de 10 unidades
O valor do produto será 23,00
Se comprar 10 ou mais unidades
O valor do produto será 17,00
Se possuir um cupom de desconto
O valor do produto será 17,00
Biblioteca do java para cobertura de teste
./gradlew build jacocoTestReport
Rodando coverage dos testes unitários
Ferramenta para realização de testes de mutação
./gradlew clean pitest
Rodando os testes um dos testes de mutação sobreviveu com isso temos um problema no desenvolvimento da funcionalidade Product
- Alterou um dos operadores de > para >= e nosso teste não quebrou
- Adicionar um cenário de teste unitário para validar o cenário de produto com valor igual a 10. (O teste vai falar, pois o BUG deve ser corrigido)
@Test
fun `deve retornar preço com desconto por valor = 10`() {
val product = Product()
val amount = 10 // igual a 10 sem cupom
val price = product.getPrice(amount, false)
Assert.assertEquals(price, 170) // R$ 17x10
}
-
Com isso Devemos corrigir o desenvolvimento da funcionalidade na validação de getPrice amount >= 10
Nenhum teste de mutação sobreviveu com isso os testes unitários estão eficientes.
Projeto configurado no sonarCloud