#maven #asciidoctor #spring-restdocs
#maven #asciidoctor #spring-restdocs
Вопрос:
Я генерирую фрагменты spring-restdocs с помощью rest assured в своих интеграционных тестах. С помощью maven и плагина failsafe, который по умолчанию integration-test
verify
использует фазу and . Проблема в том, что asciidoctor-maven-plugin
(для создания конечного HTML-файла из фрагментов) и maven-resources-plugin
(для копирования конечного HTML-файла в нужное место) запускаются перед интеграционными тестами prepare-package
.
При этом asciidoctor, естественно, терпит неудачу, поскольку фрагменты еще не сгенерированы.
Если я настрою asciidoctor для запуска post-integration-test
, он завершится успешно, но тогда готовой HTML-страницы нет в моем jar, потому что jar уже был создан на package
этапе.
Поэтому я чувствую, что единственный вариант — запустить мои интеграционные тесты уже на tests
этапе (вероятно, с помощью surefire вместо failsafe).
Я мог бы также отделить тесты, связанные с документацией, от остальных интеграционных тестов, но мне действительно нравится, когда они находятся в, казалось бы, правильном месте.
Интересно, есть ли лучшая практика, которую я игнорирую? Должны ли интеграционные тесты никогда не создавать что-то, что можно поместить в jar?
Мне кажется, что интеграционные тесты в maven предназначены для перекрестных тестов (следовательно, запускают их после пакета). И не так, как я их использую, просто для более крупных тестов, которые включают несколько частей (особенно DB) в одном jar.
Что я хотел бы:
- запустите все тесты
- скомпилируйте документацию
- упакуйте все в jar
Выдержка из моего pom.xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
<configuration>
<skip>${skipSurefire}</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.22.1</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
<configuration>
<includes>
<include>**/*IT.java</include>
<include>**/*E2ET.java</include>
</includes>
</configuration>
</plugin>
<!-- Compile API documentation -->
<plugin>
<groupId>org.asciidoctor</groupId>
<artifactId>asciidoctor-maven-plugin</artifactId>
<version>1.5.8</version>
<executions>
<execution>
<id>generate-docs</id>
<phase>prepare-package</phase>
<goals>
<goal>process-asciidoc</goal>
</goals>
<configuration>
<backend>html</backend>
<doctype>book</doctype>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-asciidoctor</artifactId>
<version>${spring-restdocs.version}</version>
</dependency>
</dependencies>
</plugin>
<!-- Package API documentation -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.outputDirectory}/public/docs
</outputDirectory>
<resources>
<resource>
<directory>
${project.build.directory}/generated-docs
</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
Ответ №1:
Фазы integration-test
и verify
— это просто привязки по умолчанию для интеграционного теста и цели проверки. Вы также можете привязать свои интеграционные тесты к test
фазе:
...
<artifactId>maven-failsafe-plugin</artifactId>
...
<executions>
<execution>
<id>integration-tests</id>
<phase>test</phase>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
</executions>
и таким образом достигается тот порядок, который вам нравится / нужен.