Pular para o conteúdo principal

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
└─────────────┘
TipoO que validaQuando usar
UnitárioRegra de negócio isolada, sem I/OCálculos, validações, mappers, helpers
IntegraçãoHTTP + DI + EF + MySQL + transaçõesToda rota SuperApp que altera ou consulta dados
E2ESuperApp + API + BD em ambiente realSmoke de release, fluxos de negócio completos

Stack padrão

FerramentaUso
xUnitFramework de testes
FluentAssertions 7 ou ShouldlyAssertions legíveis
NSubstituteMocks (unitários)
Microsoft.AspNetCore.Mvc.TestingWebApplicationFactory
Testcontainers.MySqlBanco MySQL real nos testes de integração
RespawnReset de dados entre testes
coverletCobertura de código no CI
TngTech.ArchUnitNET.xUnitTestes arquiteturais (convenções modulares)
BogusDados 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

DocumentoConteúdo
Padrões e convençõesNomenclatura, AAA, mocks, checklist, anti-padrões
Setup e infraestruturaProjetos, pacotes, CI, WebApplicationFactory, Testcontainers
Testes unitáriosComo escrever unitários de qualidade na SGApi
Testes arquiteturaisConvenções modulares com ArchUnitNET
Testes de integraçãoComo escrever integrações funcionais (HTTP + MySQL)
Testes E2ESmoke em staging, critérios e escopo

Prioridade de implementação

  1. Fase 0 — Setup (projetos, factory, container MySQL, seed, JWT de teste)
  2. Fase 1 — Integração: ajuste de estoque, transferências, inventário, recebimento, auth
  3. Fase 2 — Unitários: calculadoras e validadores extraídos dos services
  4. 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_qatu
  • estoques.quantidade_atual
  • es2
  • es1g
  • mov{loja}estoque{MMYY}

Referências externas