Когда-то наткнулся на такую библиотеку ArchUnit (https://www.archunit.org).
С помощью неё можно можно писать unit-тесты для вашего фреймворка автотестов, например:
@Test
public void checkLayers() {
layeredArchitecture()
.layer("Tests")
.definedBy("..tests..")
.layer("Steps")
.definedBy("..steps..")
.layer("Pages")
.definedBy("..pages..")
.whereLayer("Tests")
.mayNotBeAccessedByAnyLayer()
.whereLayer("Steps")
.mayOnlyBeAccessedByLayers("Tests")
.whereLayer("Pages")
.mayOnlyBeAccessedByLayers("Steps")
.check(classes);
}
В данном примере проверяется, что слой тестов Tests не вызывается из других слоёв, слой Steps вызывается только из Tests и слой Pages вызывается только из Steps. Таким образом проверяется простая вложенная структура проекта.
Рассмотрим ещё один пример:
@Test
public void checkSteps() {
methods()
.that().arePublic()
.and()
.areDeclaredInClassesThat()
.resideInAPackage("..steps..")
.should()
.beAnnotatedWith(Step.class)
.check(classes);
}
Здесь мы для всего пакета steps у публичных методов проверяем наличие аллюровской аннотации
@StepКак по мне это полезная проверка, чтобы в отчётиках всегда было видно описание шага)
⭐️ Преимущества использования ArchUnit:
— поддержание архитектурных стандартов на всём протяжении проекта
– упрощение рефакторингов
— повышение качества кода
💡 Из особенностей, на которые стоит обратить внимание:
— скорость работы (чем больше проект, тем нужно больше времени на анализ всех файлов)
— сложности при использовании в связке с Groovy (данная библиотека предназначена только для Java, но при определённом желании потратить свои силы и нервы можно настроить и для Groovy)
Есть также аналоги на других языках:
👩💻 pytestarch
👩💻 konsist
🟪 NetArchTest
#автотесты #архитектура #ArchUnit
