Teste Unitário JUnit
@Test, assertions e boas práticas
Testes unitários verificam que cada unidade do código (geralmente um método) funciona corretamente de forma isolada. JUnit 5 (Jupiter) é o framework padrão no ecossistema Java, presente em qualquer projeto Maven/Gradle com Spring Boot.
A anotação @Test marca um método como teste. Assertions verificam o comportamento esperado: assertEquals compara valores, assertTrue verifica condição, assertThrows verifica que uma exceção foi lançada, assertAll verifica múltiplas condições. @BeforeEach e @AfterEach executam código antes/depois de cada teste para configurar e limpar o estado.
A convenção AAA estrutura cada teste: Arrange (prepara dados e mocks), Act (executa a ação a testar), Assert (verifica o resultado). Testes devem ser FIRST: Fast (rápidos), Independent (independentes entre si), Repeatable (mesmo resultado sempre), Self-validating (passam ou falham sem intervenção) e Timely (escritos junto com o código).
import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.*;
class CalculadoraTest {
Calculadora calc;
@BeforeEach // executa antes de CADA teste
void setUp() {
calc = new Calculadora();
}
@Test
@DisplayName("Soma de dois positivos retorna a soma correta")
void deveSomarDoisPositivos() {
// Arrange
int a = 5, b = 3;
// Act
int resultado = calc.somar(a, b);
// Assert
assertEquals(8, resultado, "5 + 3 deve ser 8");
}
@Test
void deveLancarExcecaoAoDividirPorZero() {
assertThrows(ArithmeticException.class, () -> {
calc.dividir(10, 0);
});
}
@Test
void verificaMultiplasCondicoes() {
assertAll("operações básicas",
() -> assertEquals(10, calc.somar(7, 3)),
() -> assertEquals(4, calc.subtrair(7, 3)),
() -> assertEquals(21, calc.multiplicar(7, 3))
);
}
}TDD (Test-Driven Development): escreva o teste antes do código (ele falha — red), implemente o mínimo para passar (green), depois refatore (refactor). Esse ciclo red-green-refactor produz código mais limpo e bem testado.