Testes — SGApi
Documentação oficial para implementação de testes automatizados no projeto SGApi (SuperApp / API .NET 10, EF Core, MySQL).
Objetivo
Garantir que rotas críticas do SuperApp funcionem de ponta a ponta — incluindo persistência real no banco — e que regressões como a do ajuste de estoque (movimento gravado, saldo não atualizado) sejam detectadas antes de produção.
Pirâmide de testes
┌─────────────┐
│ E2E │ Poucos — fluxos críticos em ambiente staging
├─────────────┤
│ Integração │ Muitos — principal defesa da SGApi
├─────────────┤
│ Unitário │ Moderado — regras puras e lógica isolada
└─────────────┘
| Tipo | O que valida | Quando usar |
|---|---|---|
| Unitário | Regra de negócio isolada, sem I/O | Cálculos, validações, mappers, helpers |
| Integração | HTTP + DI + EF + MySQL + transações | Toda rota SuperApp que altera ou consulta dados |
| E2E | SuperApp + API + BD em ambiente real | Smoke de release, fluxos de negócio completos |
Stack padrão
| Ferramenta | Uso |
|---|---|
| xUnit | Framework de testes |
| FluentAssertions 7 ou Shouldly | Assertions legíveis |
| NSubstitute | Mocks (unitários) |
| Microsoft.AspNetCore.Mvc.Testing | WebApplicationFactory |
| Testcontainers.MySql | Banco MySQL real nos testes de integração |
| Respawn | Reset de dados entre testes |
| coverlet | Cobertura de código no CI |
| TngTech.ArchUnitNET.xUnit | Testes arquiteturais (convenções modulares) |
| Bogus | Dados fake para seeds |
Não usar EF InMemory ou SQLite como substituto do MySQL em testes de integração.
Estrutura de projetos (alvo)
LinearMonitorSolution/
├── SGApi Solution/
│ ├── SGApi.csproj
│ └── testes/ ← esta documentação
├── SGApi.UnitTests/
│ ├── Comercial/
│ ├── Geral/
│ ├── Infra/
│ └── Helpers/
└── SGApi.IntegrationTests/
├── Fixtures/
├── Comercial/
├── Auth/
└── Helpers/
Documentação por tipo
| Documento | Conteúdo |
|---|---|
| Padrões e convenções | Nomenclatura, AAA, mocks, checklist, anti-padrões |
| Setup e infraestrutura | Projetos, pacotes, CI, WebApplicationFactory, Testcontainers |
| Testes unitários | Como escrever unitários de qualidade na SGApi |
| Testes arquiteturais | Convenções modulares com ArchUnitNET |
| Testes de integração | Como escrever integrações funcionais (HTTP + MySQL) |
| Testes E2E | Smoke em staging, critérios e escopo |
Prioridade de implementação
- Fase 0 — Setup (projetos, factory, container MySQL, seed, JWT de teste)
- Fase 1 — Integração: ajuste de estoque, transferências, inventário, recebimento, auth
- Fase 2 — Unitários: calculadoras e validadores extraídos dos services
- Fase 3 — E2E smoke em staging antes de release
Regra de ouro (mutações de dados)
Todo teste que altera estoque, preço ou movimentação deve assertar todas as tabelas de negócio afetadas — não apenas a que aparece na tela do SG Linear.
Exemplo (ajuste de estoque):
es1.es2_qatuestoques.quantidade_atuales2es1gmov{loja}estoque{MMYY}