Skip to content

QA-5: Архитектурные тесты (ArchUnit) #105

Description

@ii-reviewer

Цель: закрепить слоистую архитектуру правилами-как-код, чтобы нарушения ловились тестом, а не на ревью.
Зависимость: INIT-1, INIT-6.

Что сделать

  • Подключи com.tngtech.archunit:archunit-junit5 и опиши правила под реальную структуру пакетов com.warehouse:
@AnalyzeClasses(packages = "com.warehouse")
class ArchitectureTest {
  @ArchTest static final ArchRule layers = layeredArchitecture().consideringOnlyDependenciesInLayers()
    .layer("Controller").definedBy("..controller..")
    .layer("Service").definedBy("..service..")
    .layer("Repository").definedBy("..repository..")
    .whereLayer("Controller").mayNotBeAccessedByAnyLayer()
    .whereLayer("Repository").mayOnlyBeAccessedByLayers("Service");
}
  • Добавь правила: entity не утекают в контроллеры (контроллеры возвращают только dto); контроллеры зависят на сервисы, не на репозитории; нейминг (*Controller, *Service, *Repository, *Specification).
  • Трудные места: правила должны отражать фактическую раскладку пакетов, а не идеальную; решить, разрешён ли mapper/specification доступ к entity; не ловить ложные срабатывания на Spring-инфраструктуре.

Acceptance criteria

  • Правило слоёв controller→service→repository прогоняется в тестах
  • Тест падает, если контроллер дёргает репозиторий напрямую
  • Тест падает при возврате entity из контроллера
  • Конвенции нейминга проверяются

Metadata

Metadata

Assignees

No one assigned

    Labels

    ciCI/CD, автоматизация сборкиenhancementNew feature or request

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions