Tutorial: Meu Primeiro App Java com Testes (TDD)
Nesta aula, você aprenderá a criar um conversor de moedas. O diferencial é que usaremos Testes Automatizados: um código que testa o seu próprio código.
1. Preparação do Ambiente no Windows
Antes de começar, precisamos garantir que seu computador entenda Java e que o VS Code esteja pronto.
- JDK (Java Development Kit): Certifique-se de ter o JDK 17 ou superior instalado.
- VS Code: Instale o “Extension Pack for Java” da Microsoft na aba de extensões (ícone de quadradinhos).
- Maven: Não se preocupe em instalar manualmente; o VS Code gerencia isso para nós.
2. Criando o Projeto
- Abra o VS Code.
- Pressione
Ctrl + Shift + Pe digite: Java: Create Java Project. - Selecione Maven → No Archetype (ou
maven-archetype-quickstart). - Escolha uma pasta no seu computador.
- GroupId: Digite
br.com.aula. - ArtifactId (Nome do projeto): Digite
conversor-moedas.
O VS Code abrirá uma nova janela com a estrutura de pastas pronta.
3. Entendendo o arquivo pom.xml
O arquivo pom.xml é o “manual de instruções” do seu projeto. Ele diz quais ferramentas externas (dependências) o Java deve baixar.
Abra o pom.xml e verifique se dentro da tag <dependencies> existe o JUnit. Se não, adicione este bloco:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.10.0</version>
<scope>test</scope>
</dependency>
4. O Fluxo de Trabalho: Red, Green, Refactor
No desenvolvimento profissional, usamos um ciclo chamado TDD. Imagine que você é um arquiteto que testa se o material aguenta o peso antes de construir a parede.
- Red (Vermelho): Escrevemos um teste que falha (porque o código ainda não existe).
- Green (Verde): Escrevemos o código mais simples possível para o teste passar.
- Refactor (Refatorar): Melhoramos o código sem mudar o que ele faz.
5. Passo a Passo do Desenvolvimento
Etapa 1: O Teste que Falha (Red)
Vá na pasta src/test/java/br/com/aula e crie o arquivo ConversorTest.java.
O que esperamos? Que ao enviar 10 dólares, o sistema nos devolva 50 reais.
package br.com.aula;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
public class ConversorTest {
@Test
public void testeConverterDolarParaReal() {
// 1. Instanciamos a classe (que ainda vai dar erro, pois não existe)
Conversor service = new Conversor();
// 2. Chamamos o método de conversão
double resultado = service.converter(10.0);
// 3. Verificamos se 10 * 5.0 é igual a 50.0
assertEquals(50.0, resultado);
}
}
Atenção: O VS Code vai sublinhar
Conversorem vermelho. Isso é normal! Estamos no estágio “Red”.
Etapa 2: Criando o Código (Green)
Agora, vá na pasta src/main/java/br/com/aula e crie o arquivo Conversor.java.
package br.com.aula;
public class Conversor {
// Definimos uma taxa fixa de 5.0 para o exemplo
public double converter(double valorDolar) {
return valorDolar * 5.0;
}
}
Etapa 3: Executando o Teste
- Volte para o arquivo
ConversorTest.java. - Acima do nome do método
@Test, você verá um pequeno botão escrito Run Test. Clique nele. - Se aparecer um check verde ✅, seu código está correto!
6. Testando Casos de Erro (Regras de Negócio)
E se o usuário digitar um valor negativo? O sistema não deve permitir. Vamos adicionar esse teste:
@Test
public void testeNaoDeveAceitarValorNegativo() {
Conversor service = new Conversor();
// Esperamos que o Java lance uma "Exception" (Erro) se o valor for -1.0
try {
service.converter(-1.0);
} catch (IllegalArgumentException e) {
assertEquals("Valor inválido", e.getMessage());
}
}
Agora, ajuste o seu código em Conversor.java para validar isso:
public double converter(double valorDolar) {
if (valorDolar < 0) {
throw new IllegalArgumentException("Valor inválido");
}
return valorDolar * 5.0;
}
Resumo para o Aluno
- src/main/java: Onde fica o “coração” do seu app.
- src/test/java: Onde ficam os “fiscais” (testes) do seu app.
- JUnit: A ferramenta que executa esses fiscais e te dá o relatório.
Excelente! Para consolidar o aprendizado, vamos propor um desafio prático. Aqui, o aluno não apenas escreve código, mas aprende a projetar a solução antes de abrir o editor.
🏆 Desafio Prático: O Sistema de Notas
Cenário: Você foi contratado para criar o motor de cálculo de uma escola. Sua tarefa é criar uma classe que receba três notas e calcule a média, informando se o aluno foi aprovado ou reprovado.
1. O Projeto (Diagrama de Classes)
Antes de codar, observe como a estrutura deve ser montada. No Java, representamos as ações (métodos) e os dados (atributos) assim:
2. Regras de Negócio (O que os testes devem validar)
Para este desafio, os alunos devem garantir que:
- A média seja calculada corretamente: .
- Se a média for 7.0 ou superior, o status deve ser
"APROVADO". - Se a média for menor que 7.0, o status deve ser
"REPROVADO". - As notas devem estar entre 0 e 10. Se alguém digitar 11, o sistema deve gerar um erro.
3. Passo a Passo do Aluno (Roteiro)
Passo 1: O Teste de Cálculo (Red)
No VS Code, crie CalculadoraNotasTest.java. Comece testando o cenário feliz (o aluno aprovado).
@Test
public void deveCalcularMediaComSucesso() {
CalculadoraNotas calc = new CalculadoraNotas();
double resultado = calc.calcularMedia(8.0, 7.0, 9.0);
assertEquals(8.0, resultado);
}
Passo 2: A Classe de Produção (Green)
Crie a classe CalculadoraNotas.java e implemente apenas o cálculo da média para ver o teste passar.
Passo 3: O Teste de Status (Regra de Negócio)
Adicione um novo teste para verificar o texto de aprovação:
@Test
public void deveRetornarAprovadoParaMediaSete() {
CalculadoraNotas calc = new CalculadoraNotas();
String status = calc.obterStatus(7.0);
assertEquals("APROVADO", status);
}
4. Dicas para o Professor (Como orientar os iniciantes)
- O Erro é Amigo: Explique que o “sublinhado vermelho” no VS Code é o compilador avisando o que falta. Não é um erro de “burrice”, é um guia de construção.
- A Precisão do Double: Lembre os alunos que em Java usamos
.(ponto) para decimais, como7.5, e não vírgula. - Atalhos do Windows: Ensine o
Alt + Shift + Fpara formatar o código e deixá-lo bonito, e oCtrl + .para importar classes automaticamente.
5. O que se espera ao final da aula?
O aluno deverá ter uma pasta de projeto organizada, com todos os testes exibindo o check verde no painel de testes do VS Code (ícone de um frasco de laboratório na lateral esquerda).
Dica Extra: Se o aluno terminar rápido, peça para ele tentar implementar uma regra onde notas menores que 4.0 deixam o aluno em
"REPROVAÇÃO DIRETA"sem direito a recuperação.
Com certeza! Vou estruturar o material em dois formatos: um Gabarito Técnico (para você) e uma Ficha de Atividade (estilo “mão na massa” para os alunos).
📗 Gabarito Técnico (Para o Professor)
Este é o código esperado para que todos os requisitos do desafio sejam atendidos, incluindo a validação de notas entre 0 e 10.
1. Classe de Produção (CalculadoraNotas.java)
package br.com.aula;
public class CalculadoraNotas {
public double calcularMedia(double n1, double n2, double n3) {
// Validação de intervalo
validarNota(n1);
validarNota(n2);
validarNota(n3);
return (n1 + n2 + n3) / 3.0;
}
public String obterStatus(double media) {
return media >= 7.0 ? "APROVADO" : "REPROVADO";
}
private void validarNota(double nota) {
if (nota < 0 || nota > 10) {
throw new IllegalArgumentException("Nota deve estar entre 0 e 10");
}
}
}
2. Classe de Teste (CalculadoraNotasTest.java)
package br.com.aula;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
public class CalculadoraNotasTest {
private final CalculadoraNotas calc = new CalculadoraNotas();
@Test
public void testeCalculoMediaSimples() {
assertEquals(7.0, calc.calcularMedia(7, 7, 7));
}
@Test
public void testeStatusAprovado() {
assertEquals("APROVADO", calc.obterStatus(7.0));
}
@Test
public void testeStatusReprovado() {
assertEquals("REPROVADO", calc.obterStatus(6.9));
}
@Test
public void testeNotaInvalidaAcimaDeDez() {
assertThrows(IllegalArgumentException.class, () -> {
calc.calcularMedia(11, 5, 5);
});
}
}
📝 Ficha de Atividade (Para o Aluno)
Nome do Aluno: _________________________________________________ Desafio: Implementação do Motor de Notas com JUnit
🎯 Missão
Você deve criar um programa que ajude professores a lançar médias. Mas atenção: o sistema precisa ser “à prova de erros” usando testes automatizados.
🚀 O que fazer?
- Crie o arquivo de Teste: No VS Code, em
src/test/java, crie a classeCalculadoraNotasTest. - Escreva o primeiro teste: Tente testar a média de 8, 8 e 8. O resultado esperado é 8.
- Crie a classe principal: Em
src/main/java, crie a classeCalculadoraNotaspara fazer o erro sumir. - Implemente a lógica: Escreva o código do cálculo e rode o teste (clicando no botão “Run Test” que aparece no VS Code).
💡 Dicas de Sobrevivência no VS Code
- A barra ficou verde? Parabéns! Seu código passou no teste.
- A barra ficou vermelha? Leia a mensagem de erro. Ela diz exatamente o que o computador recebeu e o que ele esperava.
- Atalho Mágico:
Ctrl + .ajuda a importar as pastas necessárias automaticamente.
🏁 Checkpoint Final
Ao terminar, chame o professor se:
- Sua classe
CalculadoraNotastiver os métodoscalcularMediaeobterStatus. - Todos os seus testes no painel lateral do VS Code estiverem com o check verde.
- Você conseguir explicar o que acontece se alguém tentar digitar uma nota 15.
Deseja que eu crie uma apresentação em slides (formato Markdown/Marp) que resuma esses passos para você projetar durante a aula?