✅ 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:
- Dado que (Given): Eu tenho um herói com 10 de força.
- Quando (When): Eu ataco um monstro.
- 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
- No Android Studio, abra a pasta
app/src/test/java/br.com.curso.pokedex. - 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):
- Envie o código da sua classe de teste.
- Nomeie como:
Gamer_SeuNome_Cap19.kt. - Submeta no canal de tarefas.