Objetivo
Orientar testes de integracao dos servicos .NET deste repositorio com foco em fidelidade, isolamento e custo de execucao.
A skill ajuda a decidir quando manter WebApplicationFactory leve, quando usar EF InMemory e quando a dependencia real com PostgreSQL via Testcontainers justifica o custo.
Ela preserva a estrategia incremental descrita nas ADRs e evita transformar testes de integracao em smoke tests distribuidos caros sem necessidade.
Quando usar
- Criar ou revisar testes em
tests/*IntegrationTests.
- Alterar factories baseadas em
WebApplicationFactory.
- Avaliar uso de EF InMemory versus PostgreSQL real.
- Introduzir ou revisar Testcontainers PostgreSQL em escopo pequeno.
- Testar endpoints HTTP, autenticacao/autorizacao, readiness, migrations, constraints, queries ou transacoes.
- Ajustar fixtures, seeds, limpeza de banco ou desligamento de hosted services em testes.
- Complementar mudancas funcionais implementadas via
dotnet-service-change quando houver necessidade de estrategia especifica de integracao.
Quando nao usar
- Testes unitarios puros de Domain, Application, mappers ou validators.
- Mudancas sem interacao HTTP, persistencia real, DI completo ou infraestrutura de teste.
- Testes e2e com Kafka, Compose ou Aspire sem decisao arquitetural explicita.
- Alteracoes em pipelines de teste sem mudar a estrategia de testes de integracao.
- Implementacoes funcionais amplas em servicos .NET cujo foco principal nao seja a estrategia de testes; nesse caso, use
dotnet-service-change como skill principal.
Entradas esperadas
- Servico, endpoint, comportamento ou bug a validar.
- Projeto de teste afetado.
- Dependencias necessarias: HTTP, banco, autenticacao, Kafka ou hosted services.
- Criterio de fidelidade esperado pelo usuario ou pela ADR aplicavel.
Saidas esperadas
- Testes de integracao focados e legiveis.
- Factory ou fixture ajustada sem afetar outros projetos indevidamente.
- Seed e limpeza de dados previsiveis.
- Justificativa quando Testcontainers for usado ou evitado.
- Validacao por projeto de teste ou pela solucao quando o impacto for transversal.
Passos
- Identifique se o teste exige pipeline HTTP real, DI completo, provider de banco real ou apenas comportamento isolado.
- Consulte
AGENTS.md, README, docs/development/test-coverage.md e ADRs relevantes antes de mudar a estrategia.
- Quando a tarefa incluir mudanca funcional relevante, alinhe a estrategia com
dotnet-service-change antes de alterar factories, providers ou fixtures.
- Localize a factory existente do servico e preserve seu padrao quando suficiente.
- Desligue hosted services externos em testes quando eles nao forem parte do comportamento validado.
- Use EF InMemory apenas quando constraints, SQL, transacoes, migrations e provider Npgsql nao forem o alvo do teste.
- Use Testcontainers PostgreSQL somente quando a fidelidade do provider real aumentar claramente a confianca.
- Mantenha containers, seeds e limpeza com ciclo de vida explicito e previsivel.
- Evite dependencias externas nao controladas e portas fixas inventadas.
- Revise se o teste cobre o risco real sem aumentar flakiness ou tempo desnecessariamente.
- Documente impacto quando a estrategia oficial de testes mudar.
Validacao
- Testes com Testcontainers/PostgreSQL devem ser executados fora do sandbox, porque precisam acessar a Docker-compatible API.
- No Windows/Rancher Desktop, se
DOCKER_HOST estiver como npipe:////./pipe/docker_engine, normalize apenas no processo do teste para o formato aceito pelo Docker.DotNet/Testcontainers:
$env:DOCKER_HOST='npipe://./pipe/docker_engine'
dotnet test ./tests/<Projeto>.csproj --configuration Release
- Execute o projeto de teste afetado quando possivel:
dotnet test ./tests/<Projeto>.csproj --configuration Release
- Para mudancas transversais em testes, use:
dotnet test ./LedgerService.slnx --configuration Release --settings ./coverlet.runsettings
- Se a suite falhar com
npipe:////pipe/docker_engine is not a valid npipe URI, repita fora do sandbox com DOCKER_HOST='npipe://./pipe/docker_engine' antes de concluir que houve falha funcional.
- Quando alterar cobertura ou estrategia oficial, valide a documentacao relacionada.
- Execute
git status antes de finalizar se houver edicoes.
Restricoes
- Nao alterar testes apenas para ocultar falha real.
- Nao tornar Testcontainers requisito amplo sem ADR ou documentacao correspondente.
- Nao usar Compose, Aspire, Kafka real ou rede externa como dependencia casual de teste.
- Nao introduzir sleeps arbitrarios; prefira sincronizacao deterministica.
- Nao incluir segredos, portas inventadas ou configuracao local nao documentada.
- Nao fazer push nem criar branch.
1---2name: integration-tests-dotnet3description: Use esta skill para criar ou revisar testes de integracao .NET neste repositorio, incluindo WebApplicationFactory, fixtures, EF InMemory, Testcontainers PostgreSQL e isolamento. Nao use para testes unitarios simples ou mudancas de producao sem teste de integracao.4---56# Objetivo78Orientar testes de integracao dos servicos .NET deste repositorio com foco em fidelidade, isolamento e custo de execucao.9A skill ajuda a decidir quando manter `WebApplicationFactory` leve, quando usar EF InMemory e quando a dependencia real com PostgreSQL via Testcontainers justifica o custo.10Ela preserva a estrategia incremental descrita nas ADRs e evita transformar testes de integracao em smoke tests distribuidos caros sem necessidade.1112# Quando usar1314- Criar ou revisar testes em `tests/*IntegrationTests`.15- Alterar factories baseadas em `WebApplicationFactory`.16- Avaliar uso de EF InMemory versus PostgreSQL real.17- Introduzir ou revisar Testcontainers PostgreSQL em escopo pequeno.18- Testar endpoints HTTP, autenticacao/autorizacao, readiness, migrations, constraints, queries ou transacoes.19- Ajustar fixtures, seeds, limpeza de banco ou desligamento de hosted services em testes.20- Complementar mudancas funcionais implementadas via `dotnet-service-change` quando houver necessidade de estrategia especifica de integracao.2122# Quando nao usar2324- Testes unitarios puros de Domain, Application, mappers ou validators.25- Mudancas sem interacao HTTP, persistencia real, DI completo ou infraestrutura de teste.26- Testes e2e com Kafka, Compose ou Aspire sem decisao arquitetural explicita.27- Alteracoes em pipelines de teste sem mudar a estrategia de testes de integracao.28- Implementacoes funcionais amplas em servicos .NET cujo foco principal nao seja a estrategia de testes; nesse caso, use `dotnet-service-change` como skill principal.2930# Entradas esperadas3132- Servico, endpoint, comportamento ou bug a validar.33- Projeto de teste afetado.34- Dependencias necessarias: HTTP, banco, autenticacao, Kafka ou hosted services.35- Criterio de fidelidade esperado pelo usuario ou pela ADR aplicavel.3637# Saidas esperadas3839- Testes de integracao focados e legiveis.40- Factory ou fixture ajustada sem afetar outros projetos indevidamente.41- Seed e limpeza de dados previsiveis.42- Justificativa quando Testcontainers for usado ou evitado.43- Validacao por projeto de teste ou pela solucao quando o impacto for transversal.4445# Passos46471. Identifique se o teste exige pipeline HTTP real, DI completo, provider de banco real ou apenas comportamento isolado.482. Consulte `AGENTS.md`, README, `docs/development/test-coverage.md` e ADRs relevantes antes de mudar a estrategia.493. Quando a tarefa incluir mudanca funcional relevante, alinhe a estrategia com `dotnet-service-change` antes de alterar factories, providers ou fixtures.504. Localize a factory existente do servico e preserve seu padrao quando suficiente.515. Desligue hosted services externos em testes quando eles nao forem parte do comportamento validado.526. Use EF InMemory apenas quando constraints, SQL, transacoes, migrations e provider Npgsql nao forem o alvo do teste.537. Use Testcontainers PostgreSQL somente quando a fidelidade do provider real aumentar claramente a confianca.548. Mantenha containers, seeds e limpeza com ciclo de vida explicito e previsivel.559. Evite dependencias externas nao controladas e portas fixas inventadas.5610. Revise se o teste cobre o risco real sem aumentar flakiness ou tempo desnecessariamente.5711. Documente impacto quando a estrategia oficial de testes mudar.5859# Validacao6061- Testes com Testcontainers/PostgreSQL devem ser executados fora do sandbox, porque precisam acessar a Docker-compatible API.62- No Windows/Rancher Desktop, se `DOCKER_HOST` estiver como `npipe:////./pipe/docker_engine`, normalize apenas no processo do teste para o formato aceito pelo Docker.DotNet/Testcontainers:6364```powershell65$env:DOCKER_HOST='npipe://./pipe/docker_engine'66dotnet test ./tests/<Projeto>.csproj --configuration Release67```6869- Execute o projeto de teste afetado quando possivel:7071```powershell72dotnet test ./tests/<Projeto>.csproj --configuration Release73```7475- Para mudancas transversais em testes, use:7677```powershell78dotnet test ./LedgerService.slnx --configuration Release --settings ./coverlet.runsettings79```8081- Se a suite falhar com `npipe:////pipe/docker_engine is not a valid npipe URI`, repita fora do sandbox com `DOCKER_HOST='npipe://./pipe/docker_engine'` antes de concluir que houve falha funcional.82- Quando alterar cobertura ou estrategia oficial, valide a documentacao relacionada.83- Execute `git status` antes de finalizar se houver edicoes.8485# Restricoes8687- Nao alterar testes apenas para ocultar falha real.88- Nao tornar Testcontainers requisito amplo sem ADR ou documentacao correspondente.89- Nao usar Compose, Aspire, Kafka real ou rede externa como dependencia casual de teste.90- Nao introduzir sleeps arbitrarios; prefira sincronizacao deterministica.91- Nao incluir segredos, portas inventadas ou configuracao local nao documentada.92- Nao fazer push nem criar branch.