📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Módulo 11: Qualidade e Testes de Software. Recomendado revisar antes de começar.
v1.0 — Engenharia de Software & Práticas Profissionais
Trilha de Especialização Pedagógica
- Tecnologias: Java 21, Spring Boot 3, Testcontainers, JUnit 5, PostgreSQL, Redis, Docker
- Arquivo Principal:
src/test/java/com/portal/testes/UsuarioIntegrationTest.java
Suíte de testes de integração automatizados em Java/Spring Boot utilizando Testcontainers para instanciar contêineres reais de PostgreSQL e Redis de forma efêmera e isolada em tempo de execução de teste.
package com.portal.testes;
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;
import static org.junit.jupiter.api.Assertions.assertTrue;
@SpringBootTest
@Testcontainers
class UsuarioIntegrationTest {
@Container
static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:16-alpine")
.withDatabaseName("testdb")
.withUsername("testuser")
.withPassword("testpass");
@Test
void deveConectarAoPostgresRealNoContainer() {
assertTrue(postgres.isRunning(), "O contêiner PostgreSQL efêmero do Testcontainers deve estar ativo");
}
}
No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:
cd testes_02_testcontainers_integration
./mvnw test
# ou k6 run load_test.js
[!TIP] Dica para execução a partir da raiz do repositório: Se você abriu o repositório completo no VS Code, basta navegar até a pasta antes de executar: cd catalogo_projetos/testes_02_testcontainers_integration
O fluxo arquitetural abaixo detalha as camadas de interface, regras de negócio e homologação automatizada na subpasta test-containers/:
flowchart TD
subgraph Apresentacao["Camada de Interface & UI"]
V1["Componentes Gráficos / Test Cases"] --> V2["Event Dispatcher / FXML"]
end
subgraph Controlador["Camada de Controle & Lógica"]
C1["Action Listeners / Controllers"] --> C2["Máquina de Estados & Regras"]
end
subgraph Dominio["Camada de Domínio & Modelo"]
M1["Entidades de Negócio"] --> M2["Persistência & Recursos"]
end
subgraph Homologacao["Qualidade & Homologação"]
Q1["Testes Automatizados"] --> Q2["Checkpoints CP-01..05 PASS"]
end
Apresentacao --> Controlador
Controlador --> Dominio
Dominio --> Homologacao
style Apresentacao fill:#e3f2fd,stroke:#1976d2,stroke-width:1.5px
style Controlador fill:#fffde7,stroke:#fbc02d,stroke-width:1.5px
style Dominio fill:#e8f5e9,stroke:#388e3c,stroke-width:1.5px
style Homologacao fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px
| ID | Persona | História de Usuário | Critério de Aceite | Prioridade |
|---|---|---|---|---|
| US-01 | Engenheiro Backend | Desejo testar consultas com PostgreSQL real em vez de banco H2 em memória | Testcontainers subindo contêiner Docker temporário idêntico ao de produção | Alta |
| US-02 | DBA de Aplicação | Desejo validar migrações Flyway e constraints reais de PostgreSQL nos testes | Execução de migrations reais durante a inicialização do contêiner de teste | Alta |
| US-03 | Arquiteto de Integração | Desejo reuso de contêiner com @Container e Singleton pattern para velocidade | Compartilhamento do contêiner entre múltiplas classes de teste reduzindo tempo | Alta |
| US-04 | Engenheiro DevOps | Desejo descarte automático do contêiner ao fim da execução (Ryuk) | Garantia de que nenhum contêiner órfão consuma recursos da máquina após os testes | Média |
| US-05 | Auditor de Integração | Desejo testes cobrindo transações complexas, bloqueios e triggers reais | Suíte de testes validando integridade transacional ACID com banco Docker | Média |
| ID | Descrição do Requisito | Criticidade |
|---|---|---|
| RF-01 | Integração JUnit 5 com Testcontainers PostgreSQLContainer oficial | Alta |
| RF-02 | Configuração dinâmica de propriedades de conexão (DynamicPropertySource) | Alta |
| RF-03 | Execução de scripts DDL e migrações reais no início da suíte | Alta |
| RF-04 | Mapeamento e repositórios testados contra banco relacional autêntico | Média |
| RF-05 | Módulo de testes automatizados com cobertura de queries nativas | Média |
| ID | Especificação Arquitetural | Criticidade |
|---|---|---|
| RNF-01 | Ambiente de teste 100% compatível e fidedigno ao ambiente de produção | Alta |
| RNF-02 | Isolamento total de portas evitando conflito com instâncias locais | Alta |
| RNF-03 | Descarte garantido de contêineres e volumes temporários | Alta |
| RNF-04 | Compatibilidade com Docker Desktop, Rancher Desktop e Podman | Média |
| RNF-05 | Organização dos fontes na pasta test-containers/ | Alta |
| User Story | Requisito Funcional | Requisito Não-Funcional | Módulo / Artefato de Código | Status de Homologação |
|---|---|---|---|---|
| US-01 | RF-01 |
RNF-01, RNF-02 |
test-containers/src/test/ |
Testado |
| US-02 | RF-03 |
RNF-01, RNF-04 |
test-containers/src/test/ |
Testado |
| US-03 | RF-02 |
RNF-01, RNF-03 |
test-containers/src/test/ |
Testado |
| US-04 | RF-01 |
RNF-03, RNF-04 |
test-containers/src/test/ |
Testado |
| US-05 | RF-05 |
RNF-01, RNF-05 |
test-containers/src/test/ |
Testado |
| Checkpoint | Escopo da Validação | Artefato Verificado | Status |
|---|---|---|---|
| CP-01 | Estrutura de Diretórios & Dependências | test-containers/ |
PASS ✅ |
| CP-02 | Modelagem de Domínio & Entidades | Domain Models |
PASS ✅ |
| CP-03 | Interface de Usuário & Eventos | View / Controller |
PASS ✅ |
| CP-04 | Recursos, Áudio & Estilização | Assets & Configs |
PASS ✅ |
| CP-05 | Homologação com Suíte de Testes | Test Suite |
PASS ✅ |