Identificação
Resumo
A aula 8 traz o tema Testes de Integração aplicado à API .NET em arquitetura SOA. A exposição (30 min) cobre a definição operacional de integração, a pirâmide de testes, o conceito de black-box como contrato observável e o framework conceitual da aula: o mapa SOA de dependências possuídas (cobertas por Testcontainers) vs dependências consumidas (cobertas por VCR / WireMock.Net).
A aula fecha com um aviso pedagógico honesto: VCR não é contract testing — Pact é a stack canônica quando o problema é contrato de verdade. Os 90 minutos seguintes são dedicados a uma atividade ponderada individual: cada aluno classifica 1 dependência do projeto, escreve um teste de sucesso + erro (Testcontainers ou WireMock.Net), abre um Merge Request com RF + RNF (ISO 25010) + justificativa da ferramenta, e cola o link na plataforma.
Objetivos de aprendizagem
- OA-1Definir teste de integração e posicioná-lo na pirâmide (vs unit e E2E), justificando a razão de existir da faixa.
- OA-2Distinguir testes black-box de white-box e justificar por que black-box é o ângulo correto em integração SOA (contrato como observável).
- OA-3Classificar dependências de um serviço SOA em possuídas (BD/broker/cache que você controla) ou consumidas (APIs de outros squads/terceiros).
- OA-4Configurar uma fixture com Testcontainers for .NET (
PostgreSqlBuilder+IAsyncLifetime) para subir dependência possuída em container Docker. - OA-5Configurar um stub HTTP com WireMock.Net (mappings + recording proxy) para isolar dependência consumida em teste de integração.
- OA-6Reconhecer que VCR/WireMock não é contract testing e citar Pact como ferramenta correta quando o problema é contrato.
- OA-7Entregar o trabalho via Merge Request com pipeline verde, descrição rastreando RF + RNF (ISO 25010) + justificativa da ferramenta escolhida.
Pré-requisitos
- API .NET do grupo já com pelo menos um fluxo de services implementado e endpoint correspondente exposto.
- Repositório do grupo configurado, com pipeline executando
dotnet testem todo MR. - Artefato de requisitos do grupo (RF, RNF) versionado — com cada item identificado por código (ex.: RF05, RNF02).
- Docker rodando na máquina do aluno e no runner do CI (pré-requisito de Testcontainers).
- Material da aula 8 lido + 1 dependência possuída e 1 dependência consumida mapeadas no caderno de bordo.
Cronograma do dia
📚 Bloco 1 · Autoestudo
10h00 — 12h00Estudo individual orientado pelo material da aula 8.
- Leitura completa do Material da Aula 8.
- Mapear 1 dependência possuída (BD/broker/cache do serviço) e 1 dependência consumida (API externa de outro squad ou terceiro) no caderno de bordo.
- Identificar 1 RF do artefato de requisitos do grupo associado a um desses fluxos.
- Ler a doc de Testcontainers for .NET ou WireMock.Net (conforme a dependência escolhida) e anotar dúvidas concretas.
📚 Leituras sugeridas:
- Testing Strategies in a Microservice Architecture — Martin Fowler
- Testcontainers for .NET — dotnet.testcontainers.org
- WireMock.Net · Wiki — github.com
- Integration tests in ASP.NET Core — Microsoft Learn
- ISO/IEC 25010 — Quality model — iso25000.com
🍴 Intervalo · Almoço
12h00 — 14h00Janela livre.
🎓 Bloco 2 · Instrução PE — Aula em metodologia ativa
14h00 — 16h30Encontro síncrono com o professor especialista. Atividade ponderada individual nos 90 min centrais.
- 14h00 — 14h15 · Daily.
- 14h15 — 14h45 · Aula expositiva: pirâmide, WebApplicationFactory, xUnit, BD em testes, CI/CD.
- 14h45 — 16h15 · Ponderada individual em sala (90 min).
- 16h15 — 16h30 · Síntese / encerramento.
🛠️ Bloco 3 · Desenvolvimento do projeto
16h30 — 18h00Janela de trabalho da equipe.
- Cobertura colaborativa: cada aluno expande os testes integrados para mais fluxos compartilhados pelo grupo.
- Revisar MRs uns dos outros, garantindo que o pipeline está verde antes do merge.
- Atualizar o documento de qualidade do projeto com a relação dos fluxos cobertos.
Detalhamento da instrução PE (14h00 — 16h30)
14h15
DailyDaily de abertura
Cada aluno apresenta em 1 minuto: 1 bug que escapou de teste unitário / 1 dependência externa do MVP (API do parceiro ou serviço de outro squad) / 1 dúvida sobre Testcontainers ou VCR.
14h22
TalkO que é integração + pirâmide
Exposição (7 min): definição operacional de integração ("duas ou mais peças conversando"), pirâmide (unit > integração > E2E), defeitos que só aparecem em integração — wiring, ORM, auth, chamadas externas. Princípio de custo: 1 bug de integração custa 10× um bug unitário.
14h28
TalkBlack-box: contrato como observável
Exposição (6 min): por que black-box é o ângulo correto em SOA. O contrato (request → response + side effects) é a superfície pública. Testar por dentro acopla o teste à implementação e quebra a cada refactor.
14h33
AtivaMapa SOA · possuídas × consumidas
Exercício (5 min): cada aluno desenha em duas colunas as dependências do seu MVP. Possuído = você controla deploy; consumido = você consome via HTTP. Pergunta orientadora do dia: "container ou cassete?"
14h40
CodingTestcontainers · live walkthrough
Live (7 min): fixture com PostgreSqlBuilder + IAsyncLifetime, ciclo de vida do container, IClassFixture, isolamento com Respawn. Exemplo de teste integrando repositório contra Postgres real.
14h45
CodingWireMock.Net · live + ⚠️ aviso
Live (5 min): WireMockServer, stub mappings, modo recording (WithProxy + SaveMapping), cassetes em Mappings/*.json. Encerra com o aviso pedagógico: VCR ≠ contract testing (cite Pact como a stack canônica).
16h15
PonderadaAtividade individual em sala — 90 min
Cada aluno classifica 1 dependência do projeto (possuída ou consumida), abre branch test/integration-{flow} no repositório do grupo, escreve 1 teste de sucesso + 1 teste de erro com Testcontainers OU WireMock.Net, garante dotnet test verde, abre o MR com descrição preenchida (RF + RNF + justificativa da ferramenta) e posta o link na plataforma.
16h30
AtivaSíntese · "a aula 8 me ensinou que..."
Cada aluno fecha em uma frase o que aprendeu. Aponta-se o link com a aula 9 (boas práticas SOA na nuvem): os testes de integração de hoje viram smoke tests no pipeline de deploy.
Estratégias de metodologia ativa
- Mapa SOA como ato de design — antes de qualquer código, o aluno classifica as dependências em possuídas e consumidas. A ferramenta sai do mapa, não da preferência pessoal.
- MR como entrega real — a avaliação é feita lendo o link de um Merge Request no repositório do grupo, não um arquivo solto. O artefato é o mesmo que será revisado em produção.
- Rastreabilidade obrigatória — toda descrição de MR cita um RF do artefato de requisitos, justifica um eixo de RNF da ISO 25010 e explica por que escolheu Testcontainers ou WireMock. Sem rastreabilidade, o teste não faz sentido.
- Honestidade pedagógica sobre VCR — explicitar em sala que VCR/WireMock não é contract testing. O aluno sai sabendo o nome certo da coisa (Pact) sem confundir a ferramenta de hoje com a ferramenta de amanhã.
- Pipeline verde como gate — não basta o código compilar;
dotnet testprecisa estar verde no pipeline. Falha técnica não é confusão de processo: é defeito.
Em SOA, a primeira pergunta antes de testar é: "eu possuo ou eu consumo?". A resposta define se vai container ou cassete. A ferramenta é consequência do mapa de dependências — não escolha estética.
Recursos e ferramentas
| Categoria | Recurso | Uso |
|---|---|---|
| Slides | slides/slide-lesson-8.html | Exposição na instrução PE (20 slides) |
| Material | materials/lesson-8-material.html | Autoestudo |
| Linguagem | .NET 8 / C# | API e testes |
| Framework de teste | xUnit | Estrutura, asserts, IClassFixture, IAsyncLifetime |
| Dependências POSSUÍDAS | Testcontainers for .NET (PostgreSqlBuilder, MsSqlBuilder, etc.) | Subir BD/broker real em container Docker descartável |
| Dependências CONSUMIDAS | WireMock.Net (stub HTTP + recording proxy) | Isolar APIs externas com cassetes JSON |
| Isolamento de dados | Respawn · Bogus (faker com seed) | Limpar e popular o BD entre testes |
| Infra obrigatória | Docker rodando local + no CI runner | Pré-requisito de Testcontainers |
| Plataforma | GitLab / GitHub do grupo | Merge Request + pipeline dotnet test |
| Referência de qualidade | ISO/IEC 25010 | Eixos de RNF (eficiência, segurança, confiabilidade, manutenibilidade) |
| Referência conceitual | Pact | Citado como contrast — a stack correta para contract testing |
Verificação de aprendizagem · Critérios da Ponderada · 10 pts
- CR-1Coordenação no grupo · Fluxo único (1,0 pt): antes de codar, o aluno registra seu fluxo numa tabela no README do repositório do grupo (colunas: aluno, fluxo, link do MR). Fluxos duplicados entre alunos do mesmo grupo são inválidos. 0,5 pt: fluxo único mas registro feito após a entrega. 0 pt: duplicação ou sem tabela.
- CR-2Testes com Testcontainers + WireMock.Net (3,0 pts): usando
xUnit, o aluno escreve 1 cenário de sucesso + 1 cenário de erro, usando obrigatoriamenteTestcontainerspara a dependência possuída eWireMock.Netpara a dependência consumida do fluxo escolhido.dotnet testverde no pipeline. 1,5 pt: só uma das ferramentas ou faltou cenário. 0 pt: sem testes funcionais. - CR-3Entrega via Merge Request (1,5 pt): submetido como MR no repositório oficial do grupo (Open ou Merged/Closed), em branch
test/integration-{flow}, gitflow correto. 0,75 pt: fora do padrão de MR. 0 pt: sem entrega via repositório. - CR-4Rastreabilidade da Regra de Negócio · RF (2,0 pts): descrição do MR classifica as duas dependências (possuída + consumida) e cita qual RF do artefato de requisitos o teste valida. ⭐ Excelência: RF exato (ex.: "RF05") + explica como o teste previne falha crítica no negócio do parceiro.
- CR-5Conexão com RNF · ISO 25010 (2,5 pts): identifica e justifica qual eixo de RNF (eficiência, segurança, confiabilidade, manutenibilidade) o fluxo testado atende ou impacta. ⭐ Excelência: citar o código exato do RNF do artefato (ex.: "RNF02") + ligação direta com o teste.
Aluno que sair às 16h15 sem fluxo único registrado + MR aberto + Testcontainers + WireMock.Net + RF + RNF + pipeline verde está em débito técnico para a aula 9 (boas práticas SOA na nuvem).
Conexão com a aula 9
A aula 9 sobe um nível: do teste local para as boas práticas SOA na nuvem. Os testes de integração que rodam hoje no laptop do aluno e no pipeline do MR vão virar smoke tests executados após o deploy, garantindo que o serviço continua respondendo aos contratos mesmo depois que a infra muda.
- A fixture com Testcontainers de hoje vira o template para os testes pós-deploy contra ambientes efêmeros na nuvem.
- Os cassetes WireMock.Net são o ponto de partida para o salto que a aula 9 propõe: substituí-los por contract testing de verdade com Pact, quando o problema é contrato e não isolamento.
- O eixo de RNF justificado hoje (eficiência, segurança, confiabilidade) volta como SLO medido pelo monitoramento na nuvem.
Antes das 10h: ler material da aula 9, listar 3 práticas de SOA na nuvem aplicáveis ao MVP do parceiro e estudar a relação entre testes de integração, smoke tests pós-deploy e contract testing com Pact.