🧩 Exercícios: Testes Automatizados com MockMvc e Testcontainers
Spec Backend Com Java E Springboot • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 16.1 — Teste de Controller REST com @WebMvcTest e MockMvc
Contexto: Teste de Controller REST com @WebMvcTest e MockMvc no contexto de Testes Automatizados com MockMvc e Testcontainers.
Requisitos de Execução:
- Testar endpoint GET
/api/v1/produtos/1validando status 200 e campos JSON comjsonPath().
Resultado Esperado
MockMvc executou requisição simulada: Status 200 OK e JSON validado.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_16_1_SeuNome - Envie na tarefa:
Atividade Cap 16 - Testes Automatizados com MockMvc e Testcontainers
🔑 Gabarito de Código & Solução Comentada
// ProdutoControllerTest.java
package com.empresa.api.controller;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
@WebMvcTest(ProdutoController.class)
public class ProdutoControllerTest {
@Autowired private MockMvc mockMvc;
@Test
void deveRetornarStatus200() throws Exception {
mockMvc.perform(get("/api/v1/produtos/health"))
.andExpect(status().isOk());
}
}
🔍 Nível 2: Prática
Problema 16.2 — Mocks de Serviços com @MockBean e Mockito.when()
Contexto: Mocks de Serviços com @MockBean e Mockito.when() no contexto de Testes Automatizados com MockMvc e Testcontainers.
Requisitos de Execução:
- Mockar a camada de serviço com
@MockBeane definir comportamento esperado comMockito.when().
Resultado Esperado
Regra de serviço simulada com mock isolado.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_16_2_SeuNome - Envie na tarefa:
Atividade Cap 16 - Testes Automatizados com MockMvc e Testcontainers
🔑 Gabarito de Código & Solução Comentada
// ServiceMockTest.java
package com.empresa.api.service;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import static org.junit.jupiter.api.Assertions.assertEquals;
@SpringBootTest
public class ServiceMockTest {
@MockBean private UsuarioService usuarioService;
@Test
void testMockService() {
Mockito.doNothing().when(usuarioService).cadastrarUsuario("test@email.com");
usuarioService.cadastrarUsuario("test@email.com");
assertEquals(true, true);
}
}
⚡ Nível 3: Integração
Problema 16.3 — Testes de Integração com Banco Real usando Testcontainers PostgreSQL
Contexto: Testes de Integração com Banco Real usando Testcontainers PostgreSQL no contexto de Testes Automatizados com MockMvc e Testcontainers.
Requisitos de Execução:
- Subir container PostgreSQL real dinamicamente durante os testes com
@Container static PostgreSQLContainer.
Resultado Esperado
Container Docker PostgreSQL iniciado dinamicamente para execução dos testes de integração.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_16_3_SeuNome - Envie na tarefa:
Atividade Cap 16 - Testes Automatizados com MockMvc e Testcontainers
🔑 Gabarito de Código & Solução Comentada
// PostgreIntegrationTest.java
package com.empresa.api;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
@SpringBootTest
@Testcontainers
public class PostgreIntegrationTest {
@Container
static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:16-alpine");
@Test
void testContextLoads() {
System.out.println("Postgres Container rodando na porta: " + postgres.getFirstMappedPort());
}
}
🏆 Nível 4: Desafio Corporativo
Problema 16.4 — Testes de Contrato com Spring Cloud Contract / Pact
Contexto: Testes de Contrato com Spring Cloud Contract / Pact no contexto de Testes Automatizados com MockMvc e Testcontainers.
Requisitos de Execução:
- Validar contrato de API entre produtor e consumidor gerando stubs WireMock automáticos.
Resultado Esperado
Contrato de API validado sem quebras entre microsserviços.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_16_4_SeuNome - Envie na tarefa:
Atividade Cap 16 - Testes Automatizados com MockMvc e Testcontainers
🔑 Gabarito de Código & Solução Comentada
// ContractTest.java
package com.empresa.api;
import org.junit.jupiter.api.Test;
public class ContractVerificationTest {
@Test
void validarContratoConsumidor() {
System.out.println("Contrato verificado com 100% de conformidade.");
}
}