Architecture Tests
Назначение
Architecture tests — обязательный быстрый CI-слой, который проверяет границы проектов, слоев, namespace conventions и запрещенные зависимости. Эти тесты дешевле, чем ловить нарушение DDD и tenant isolation на code review.
Инструменты
| Инструмент | Для Чего |
|---|---|
NetArchTest | правила зависимостей между assemblies и namespaces. |
Microsoft.CodeAnalysis analyzers | точечные запреты: HttpContext в Application, DbContext в controller, IQueryable наружу. |
ArchUnitNET | альтернативный вариант для dependency rules, если удобнее команде. |
| custom test helpers | проверка naming и file layout. |
Минимальный Набор Тестов
| Test | Правило |
|---|---|
DomainDoesNotDependOnInfrastructure | Domain не зависит от EF, ASP.NET, MassTransit, Redis, Elasticsearch, ClickHouse. |
ApplicationDoesNotDependOnApiOrInfrastructure | Application не зависит от Api/Infrastructure и runtime web context. |
ServicesDoNotReferenceEachOther | Project reference между сервисами запрещен. |
ControllersDoNotUseDbContext | Controllers работают через MediatR. |
HandlersDoNotUseHttpContext | Actor/tenant/correlation берутся через providers. |
RepositoriesDoNotExposeQueryable | Repository возвращает typed results, pages или aggregates. |
ApplicationUsesFeatureSlices | Root-level Commands, Queries, Validators, Handlers в Application запрещены. |
ContractsAreStrictlyTyped | Public contracts не содержат untyped object/json models. |
File Layout Checks
Application feature проверяется по шаблону:
Pin.<Service>.Application/<FeatureGroup>/<Feature>/
Разрешенные suffixes:
Command.cs;CommandHandler.cs;CommandResult.cs;CommandValidator.cs;Query.cs;QueryHandler.cs;QueryResult.cs;QueryValidator.cs;Policy.cs;Mapping.cs;Specification.cs;
Папка feature не обязана содержать все файлы. Она содержит только файлы своего use case.
Когда Запускать
- На каждый pull request.
- Перед merge в protected branch.
- Локально при изменении shared building blocks, project references или service structure.
Что Делать При Нарушении
- Исправить зависимость или file layout.
- Если нарушение намеренное, создать ADR с bounded exception.
- Добавить test skip нельзя без ссылки на ADR и даты пересмотра.
Definition Of Done
Новая service skeleton или shared package считается готовым только если architecture tests включены в solution и CI.
Обратные ссылки
Автоссылки: где используется этот документ.
- adr (1): ADR-0013: Layer Dependencies И Architecture Tests
- backend-shared-standards-index.md (1): Backend Shared Standards Index
- layer-dependency-rules.md (1): Правила Зависимостей Между Слоями