Выполнение тестов ArchUnit из библиотеки Java
У меня есть несколько микросервисов Java Dropwizard с похожей структурой. Моя цель - написать набор тестовых примеров ArchUnit, которые необходимо запускать в каждой службе, и сборка должна завершиться неудачно, если эти тестовые примеры не пройдут.
Поскольку проверки будут аналогичными, возможно ли, что я извлечу все тестовые примеры из общей библиотеки и добавлю их в качестве зависимости в каждую службу? Как добавить тестовые примеры из библиотеки для запуска при сборке сервиса?
2 ответа
Если вы используете JUnit, Maven и Maven Surefire Plugin, задача проста:
- Упакуйте все свои тесты ArchUnit как артефакт Maven, скажем, с groupId
org.myproject
и artifactIdmyproject-archunit-tests
. Добавьте информацию о зависимости в pom вашего другого артефакта с помощью тестовой области:
<dependency> <groupId>org.myproject</groupId> <artifactId>myproject-archunit-tests</artifactId> <version>0.0.1</version> <scope>test</scope> </dependency>
- Настройте подключаемый модуль Maven Surefire в pom другого артефакта, чтобы тесты были включены в тестовый запуск:
См. Также https://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html.<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.2</version> <configuration> <dependenciesToScan> <dependency>org.myproject:myproject-archunit-tests</dependency> </dependenciesToScan> </configuration> </plugin>
Также есть подключаемый модуль Maven и подключаемый модуль Gradle , которые можно добавить в сборку каждого микросервиса.
Помимо этого, как уже упоминалось, речь идет только о зависимости от артефакта, содержащего ваши тесты, и последующего их выполнения. Либо настроив исполнителя тестов на выбор тестов из тестового артефакта в пути к классам, либо следуя шаблону, описанному в руководстве пользователя, где у вас будет один тест внутри проектов, который импортирует все тесты из вашей библиотеки. Например
@AnalyzeClasses(packages = "my.specific.project")
class ArchitectureTest {
@ArchTest
static final ArchTests commonRules = ArchTests.in(CommonRules.class);
}
Последнее даст вам то преимущество, что вы все равно можете настроить другой импорт для каждого проекта.