我在集成测试中放心地生成 spring-restdocs 片段。
使用 maven 和默认为 integration-test
和 verify
阶段的故障安全插件。问题是,asciidoctor-maven-plugin
(从片段中生成最终的 HTML 文件)和 maven-resources-plugin
(将最终的 HTML 文件复制到正确的位置)在 prepare-package
中的集成测试之前运行。
使用 asciidoctor 自然会失败,因为代码片段尚未生成。
如果我将 asciidoctor 配置为在 post-integration-test
运行,它会成功,但完成的 HTML 页面不在我的 jar 中,因为该 jar 已在 包中创建
阶段。
所以我觉得唯一的选择是在 tests
阶段运行我的集成测试(可能使用surefire而不是failsafe)。
我还可以将与文档相关的测试从其余集成测试中分离出来,但我实际上喜欢将它们放在看似正确的位置。
我想知道是否有我忽略的最佳实践? 集成测试是否应该永远不会产生可放入 jar 中的东西?
在我看来,maven 中的集成测试是为了跨 jar 测试(因此在打包后运行它们)。不像我正在使用它们,只是为了更大测试,涉及多个部分(特别是数据库)都在一个 jar 里。
我想要什么:
- 运行所有测试
- 编译文档
- 将所有内容打包到 jar 中
摘 self 的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>
最佳答案
阶段integration-test
和verify
只是integration-test的默认绑定(bind)。和 verify目标。您还可以将集成测试绑定(bind)到 test
阶段:
...
<artifactId>maven-failsafe-plugin</artifactId>
...
<executions>
<execution>
<id>integration-tests</id>
<phase>test</phase>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
</executions>
这样就可以达到您喜欢/需要的顺序。
关于maven - 集成测试为打包的 jar 创建文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65469425/