🧩 Exercícios - Cap 21: Testes de Combate: Qualidade

📖 Ver Cap 21

🎯 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:

  1. Crie a função a ser testada (fora da classe de teste, ex: em Combate.kt):
    fun estaDerrotado(vida: Int): Boolean {
        return vida <= 0
    }
    
  2. No CombateTest.kt, adicione os imports:
    import org.junit.jupiter.api.Assertions.assertTrue
    import org.junit.jupiter.api.Assertions.assertFalse
    
  3. 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


🆘 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

⬅️ Voltar para Exercícios