Testes em Java: visão geral de frameworks e ferramentas
Testes de qualidade são uma parte essencial do desenvolvimento em Java. Os frameworks modernos permitem automatizar a verificação de código, detectar erros nas fases iniciais e garantir a estabilidade da aplicação. Neste artigo, abordaremos as principais ferramentas para testes unitários, mocking e testes de integração em Java, além de apresentar exemplos práticos de sua utilização.
1. JUnit 5 — padrão de testes unitários
JUnit 5 (Jupiter) é o framework mais popular para testes modulares em Java. Ele fornece anotações para definir métodos de teste, gerenciar o ciclo de vida e parametrização.
Principais anotações do JUnit 5:
@Test— marca um método de teste@BeforeEach/@AfterEach— executados antes/depois de cada teste@BeforeAll/@AfterAll— executados uma vez para toda a classe@ParameterizedTest— para testes com diferentes dados de entrada
Exemplo de teste simples:
import org.junit.jupiter.api.Test;import static org.junit.jupiter.api.Assertions.*;
public class CalculatorTest {
@Test void testAddition() { Calculator calc = new Calculator(); assertEquals(5, calc.add(2, 3)); }
@Test void testDivisionByZero() { Calculator calc = new Calculator(); assertThrows(ArithmeticException.class, () -> calc.divide(10, 0)); }}2. TestNG — alternativa com recursos avançados
TestNG (Test Next Generation) é outro framework poderoso, inspirado no JUnit, mas que oferece funcionalidades adicionais: agrupamento de testes, testes dependentes, execução paralela e configurações flexíveis via XML.
Características distintivas do TestNG:
@Test(groups = {"smoke"})— agrupamento de testes@DataProvider— fornecimento de dados para os testes@Test(dependsOnMethods = {"methodA"})— dependências entre testes
Exemplo com DataProvider:
import org.testng.annotations.DataProvider;import org.testng.annotations.Test;import static org.testng.Assert.assertEquals;
public class DataDrivenTest {
@DataProvider(name = "testData") public Object[][] createData() { return new Object[][] { { 1, 2, 3 }, { 5, -3, 2 }, { 0, 0, 0 } }; }
@Test(dataProvider = "testData") public void testAdd(int a, int b, int expected) { Calculator calc = new Calculator(); assertEquals(calc.add(a, b), expected); }}3. Mockito — criação de stubs (mocks)
Mockito é uma biblioteca para criar objetos mock em Java. Ela permite isolar o componente testado de suas dependências (banco de dados, serviços externos) e verificar a interação entre objetos.
Principais recursos do Mockito:
mock()— criação de um objeto mockwhen().thenReturn()— definição de comportamentoverify()— verificação de chamadas de métodos@Mocke@InjectMocks— injeção automática de mocks
Exemplo de uso do Mockito:
import static org.mockito.Mockito.*;import org.junit.jupiter.api.Test;
public class UserServiceTest {
@Test void testGetUser() { // Criamos um mock para o repositório UserRepository mockRepo = mock(UserRepository.class); when(mockRepo.findById(1L)).thenReturn(new User("Alice"));
UserService service = new UserService(mockRepo); User user = service.getUser(1L);
assertEquals("Alice", user.getName()); verify(mock