Я создаю фрагменты spring-restdocs с уверенностью в своих интеграционных тестах. С maven и отказоустойчивым плагином, который по умолчанию использует фазы integration-test
и verify
. Проблема в том, что asciidoctor-maven-plugin
(чтобы сгенерировать окончательный файл HTML из фрагментов) и maven-resources-plugin
(чтобы скопировать окончательный файл HTML в нужное место) выполняются до интеграционных тестов в prepare-package
.
С этим asciidoctor, естественно, не работает, потому что сниппеты еще не сгенерированы.
Если я настрою asciidoctor для запуска в post-integration-test
, он преуспеет, но готовая HTML-страница не будет в моей банке, потому что банка уже была создана на этапе package
.
Поэтому я чувствую, что единственный вариант — запустить мои интеграционные тесты уже на этапе tests
(вероятно, с уверенным срабатыванием вместо отказоустойчивого).
Я также мог бы отделить тесты, связанные с документацией, от остальных интеграционных тестов, но на самом деле мне нравится располагать их в, казалось бы, правильном месте.
Интересно, есть ли передовая практика, которую я игнорирую? Должны ли интеграционные тесты никогда не создавать что-то, что можно поместить в банку?
Мне кажется, что интеграционные тесты в maven предназначены для перекрестных тестов (следовательно, их запускают после пакета). И не так, как я их использую, просто для больших тестов, которые включают несколько частей (особенно БД) в одном банке.
Что я хотел бы:
- запустить все тесты
- компилировать документацию
- упаковать все в банку
Выдержка из моего 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>