ADR-0040: Testing Strategy — Стандарт Тестирования Backend
Статус
Принято.
Контекст
Pin является финансово-регуляторной системой с высокими требованиями к надёжности: ошибки в accounting, payment callbacks, KYC, incentive redemption или user safety могут привести к финансовым потерям или регуляторным нарушениям. Без чёткого стандарта тестирования сервисы расходятся по глубине покрытия, а critical paths остаются непокрытыми.
Решение
Пирамида Тестов
▲
/E2E\ — минимально (smoke tests в staging)
/──────\
/ API / \ — WebApplicationFactory, TestServer
/──────────\
/ Application\ — handlers, behaviors, pipeline
/──────────────\
/ Domain \ — aggregates, value objects, domain services
/──────────────────\
Обязательный Стек
| Инструмент | Назначение |
|---|---|
xUnit | Test framework |
FluentAssertions | Assertions |
Moq + AutoFixture.AutoMoq | Mocks + test data generation |
Testcontainers | Реальные PostgreSQL, Kafka, Redis, ClickHouse, Elasticsearch |
WebApplicationFactory | API component tests с реальным startup |
MassTransit.Testing | Consumer, saga, outbox behavior |
Respawn | Быстрый сброс БД между тестами |
Pin.Kernel.Testing | PinWebApplicationFactory, FakeActorContextModule |
Обязательные Test Projects
tests/services/<service>/
<Service>.Domain.Tests/
<Service>.Application.Tests/
<Service>.Infrastructure.Tests/
<Service>.Api.Tests/
<Service>.Contract.Tests/
<Service>.TestKit/
Обязательные Тесты По Категориям
Financial code, identity, payment callbacks, game callbacks: unit + integration + consumer/idempotency.
Repository scope: user не видит чужое, tenant admin не видит другой tenant, missing scope fail closed, global admin bypass требует permission + audit.
State transitions: happy path, illegal transition, compensation для saga.
API: 401, 403, validation error, success, idempotent replay, audit для каждого high-impact endpoint.
Export: файл открывается, содержит правильные данные, privacy suppression работает, partner не получает чужое.
Последствия
- Financial и security code не мержится без integration tests с реальными containers.
- Testcontainers запускаются через shared fixtures для экономии ресурсов CI.
TestKitизбавляет от дублирования setup между тестовыми классами.FakeActorContextModuleпозволяет тестировать auth/scope без реального Identity Service.
Ссылки
- Backend Testing Rules
- Testing Patterns — Developer Guide
- Bootstrap Kernel Runtime And Testing