Перейти к основному содержимому

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Правило
DomainDoesNotDependOnInfrastructureDomain не зависит от EF, ASP.NET, MassTransit, Redis, Elasticsearch, ClickHouse.
ApplicationDoesNotDependOnApiOrInfrastructureApplication не зависит от Api/Infrastructure и runtime web context.
ServicesDoNotReferenceEachOtherProject reference между сервисами запрещен.
ControllersDoNotUseDbContextControllers работают через MediatR.
HandlersDoNotUseHttpContextActor/tenant/correlation берутся через providers.
RepositoriesDoNotExposeQueryableRepository возвращает typed results, pages или aggregates.
ApplicationUsesFeatureSlicesRoot-level Commands, Queries, Validators, Handlers в Application запрещены.
ContractsAreStrictlyTypedPublic 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.

Что Делать При Нарушении

  1. Исправить зависимость или file layout.
  2. Если нарушение намеренное, создать ADR с bounded exception.
  3. Добавить test skip нельзя без ссылки на ADR и даты пересмотра.

Definition Of Done

Новая service skeleton или shared package считается готовым только если architecture tests включены в solution и CI.

Обратные ссылки

Автоссылки: где используется этот документ.