🧩 Exercícios - Cap 21: Testes de Combate: Qualidade
🎯 Antes de começar
No Cap 21 você escreveu testes com assertEquals (GIVEN/WHEN/THEN) para verificarVida e adicionarXp. Depois de completar as duas Práticas, faça o exercício extra abaixo para conhecer assertTrue e assertFalse — usados quando a função testada retorna Boolean.
💪 Exercício Extra 1: Testando com assertTrue e assertFalse (15 min)
Objetivo: Escrever dois testes para uma função que retorna Boolean, usando assertTrue (espera true) e assertFalse (espera false).
Passos:
- Crie a função a ser testada (fora da classe de teste, ex: em
Combate.kt):fun estaDerrotado(vida: Int): Boolean { return vida <= 0 } - No
CombateTest.kt, adicione os imports:import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Assertions.assertFalse - Escreva os dois testes:
@Test fun seVidaForZeroOuMenos_DeveEstarDerrotado() { // GIVEN: vida = 0 // WHEN: chamamos estaDerrotado val resultado = estaDerrotado(0) // THEN: deve ser true assertTrue(resultado) } @Test fun seVidaForPositiva_NaoDeveEstarDerrotado() { // GIVEN: vida = 50 // WHEN: chamamos estaDerrotado val resultado = estaDerrotado(50) // THEN: deve ser false assertFalse(resultado) }
✅ Resultado Esperado
- Os dois testes aparecem verdes (✅) no Android Studio.
seVidaForZeroOuMenos_DeveEstarDerrotadoconfirma queestaDerrotado(0)retornatrue.seVidaForPositiva_NaoDeveEstarDerrotadoconfirma queestaDerrotado(50)retornafalse.- Se você mudar
vida <= 0paravida < 0, o primeiro teste falha — poisestaDerrotado(0)passaria a retornarfalse, eassertTrue(false)não passa.
🆘 Resolução de Problemas Comuns
| Erro | Causa | Solução |
|---|---|---|
Unresolved reference: assertTrue (ou assertFalse) |
Faltou o import correspondente | Adicione import org.junit.jupiter.api.Assertions.assertTrue e ...assertFalse |
| Teste falha com “expected true but was false” (ou o contrário) | A lógica de estaDerrotado está diferente do esperado (ex: usa < em vez de <=) |
Revise a condição: vida <= 0 deve cobrir vida = 0 |
Confusão entre assertTrue(x) e assertEquals(true, x) |
Ambos funcionam, mas assertTrue/assertFalse são a forma idiomática para Boolean |
Prefira assertTrue(resultado)/assertFalse(resultado) quando o retorno já é Boolean |
Unresolved reference: mockk (ou every) |
Faltou adicionar testImplementation "io.mockk:mockk:1.13.8" no build.gradle (Module :app) |
Adicione a dependência (ver 📦 no Cap 21) e clique em “Sync Now” |
io.mockk.MockKException: no answer found for: RankingService(#1).buscarRecorde() |
Esqueceu o every { ... } returns ... antes de chamar a função testada |
Configure o Mock com every { servicoFalso.buscarRecorde() } returns ... antes do bloco WHEN |