✅ Cap 19: Testes de Combate: Qualidade

🎯 Objetivo da Aula: Ao final desta aula, você entenderá o que são Testes de Unidade. Você aprenderá a criar pequenos scripts que verificam automaticamente se as contas do seu jogo (pontos, vida, dano) estão corretas, evitando que bugs cheguem aos jogadores.


🏢 O Cenário Prático (Seu Desafio): Você mudou a regra de cálculo de dano, mas sem querer quebrou o sistema de cura! Agora os jogadores estão imortais. Seu desafio é criar um Escudo de Qualidade: uma bateria de testes que verifica se 10 de ataque - 2 de defesa dá exatamente 8 de dano. Se o resultado for diferente, o computador te avisa na hora!


🧠 Fundamentos: A Teoria Traduzida

📖 Dicionário do Programador

  • Teste de Unidade: É testar uma “peça” (função) isolada do app.
  • Assert (Afirmar): É o comando de verificação. “Eu afirmo que o resultado deve ser 10”. Se for 9, o teste falha.
  • Mock (Dublê): Se sua função precisa de internet para ser testada, você usa um “servidor de mentira” para o teste ser rápido e não depender de Wi-Fi.

🎨 O Padrão de Teste (GIVEN / WHEN / THEN)

Organizamos o teste em 3 partes:

  1. Dado que (Given): Eu tenho um herói com 10 de força.
  2. Quando (When): Eu ataco um monstro.
  3. Então (Then): O monstro deve perder 10 de vida.
graph LR
    A[Dados de Teste] --> B(Sua Função)
    B --> C[Resultado]
    C --> D{Comparação: Assert}
    D -->|Sucesso| E[✅ Teste Passou]

📖 Exemplo Passo a Passo: Testando o Dano

  1. No Android Studio, abra a pasta app/src/test/java/br.com.curso.pokedex.
  2. Crie um arquivo chamado CombateTest.kt.
class CombateTest {
    @Test
    fun verificarCalculoDeDano() {
        // GIVEN: Dado que o ataque é 10 e a defesa é 2
        val ataque = 10
        val defesa = 2
 
        // WHEN: Quando calculamos o dano
        val resultado = calcularDano(ataque, defesa)
 
        // THEN: Então o resultado DEVE ser 8
        assertEquals(8, resultado)
    }
}

🛠️ Prática Obrigatória 1: Escreva um teste de unidade para uma função chamada verificarVida. O seu teste deve garantir que, se a vida for 0, a função retorne o texto "GAME OVER".


🛠️ Prática Obrigatória 2: Crie um teste que verifique se o XP ganho nunca é negativo. Se você tentar somar -50 de XP, o sistema deve ignorar e manter o XP atual.


🔑 Gabarito Passo a Passo:

@Test
fun seVidaForZero_DeveRetornarGameOver() {
    val status = verificarVida(0)
    assertEquals("GAME OVER", status)
}
 
@Test
fun seXpForNegativo_NaoDeveMudarOValor() {
    val novoXp = adicionarXp(atual = 100, ganho = -50)
    assertEquals(100, novoXp) // Não deve diminuir!
}

📤 Instruções de Entrega (Microsoft Teams):

  1. Envie o código da sua classe de teste.
  2. Nomeie como: Gamer_SeuNome_Cap19.kt.
  3. Submeta no canal de tarefas.

Capitulo Anterior | Proximo Capitulo