Выполнение тестов ArchUnit из библиотеки Java

У меня есть несколько микросервисов Java Dropwizard с похожей структурой. Моя цель - написать набор тестовых примеров ArchUnit, которые необходимо запускать в каждой службе, и сборка должна завершиться неудачно, если эти тестовые примеры не пройдут.

Поскольку проверки будут аналогичными, возможно ли, что я извлечу все тестовые примеры из общей библиотеки и добавлю их в качестве зависимости в каждую службу? Как добавить тестовые примеры из библиотеки для запуска при сборке сервиса?

2 ответа

Если вы используете JUnit, Maven и Maven Surefire Plugin, задача проста:

  • Упакуйте все свои тесты ArchUnit как артефакт Maven, скажем, с groupId org.myproject и artifactId myproject-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 другого артефакта, чтобы тесты были включены в тестовый запуск:
    <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>
    
    См. Также https://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html.

Также есть подключаемый модуль Maven и подключаемый модуль Gradle , которые можно добавить в сборку каждого микросервиса.

Помимо этого, как уже упоминалось, речь идет только о зависимости от артефакта, содержащего ваши тесты, и последующего их выполнения. Либо настроив исполнителя тестов на выбор тестов из тестового артефакта в пути к классам, либо следуя шаблону, описанному в руководстве пользователя, где у вас будет один тест внутри проектов, который импортирует все тесты из вашей библиотеки. Например

      @AnalyzeClasses(packages = "my.specific.project")
class ArchitectureTest {

    @ArchTest
    static final ArchTests commonRules = ArchTests.in(CommonRules.class);
}

Последнее даст вам то преимущество, что вы все равно можете настроить другой импорт для каждого проекта.

Другие вопросы по тегам