Java 如何使用path通过maven surefire插件包含集成测试
我的Java Maven项目在目录结构中将单元测试与集成测试分开:Java 如何使用path通过maven surefire插件包含集成测试,java,maven,testing,integration-testing,Java,Maven,Testing,Integration Testing,我的Java Maven项目在目录结构中将单元测试与集成测试分开: src/test/java下的单元测试 集成测试src/integrationtest/java src/integration test/java是一个非默认的测试源目录,因此我使用build helper maven plugin将其手动添加到项目中,如您所见: <plugin> <groupId>org.codehaus.mojo</groupId>
src/test/java下的单元测试李>
- 集成测试
src/integrationtest/java
- 集成测试
src/integration test/java
是一个非默认的测试源目录,因此我使用build helper maven plugin
将其手动添加到项目中,如您所见:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>add-integration-test-sources</id>
<phase>generate-test-sources</phase>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>src/integration-test/java</source>
</sources>
</configuration>
</execution>
...
</executions>
</plugin>
这种方法是可行的,但我不得不在测试类中使用命名约定。确切地说,只有以“IntegrationTest”结尾的测试才会执行
我想根据路径中的命名约定而不是文件名来配置插件。确切地说,我打算允许src/integration test/java
下的所有类,而不考虑文件名。到目前为止,我还没有成功,网络上的每一个教程都只展示了我在上面实现并向您展示的方法
有人对怎么做有什么建议吗
谢谢,两个插件(surefire和failsafe)都使用类路径。因此,为了实现您想要的,您要么使用命名约定(例如测试vs IT as standard),要么使用两个不同的模块
我能找到的唯一其他(真正丑陋的)解决方案是:
- 将普通的单元测试也放在另一个目录中
- 创建两个配置文件
- 一个用于surefire,在build helper中具有相应的源目录
- 第二个用于在生成帮助程序中使用相应的源目录进行故障保护
- 在每个配置文件中,您通过其配置停用另一个测试插件
- 默认情况下,使surefire配置文件处于活动状态
- 在集成测试阶段,在当前pom上执行一个调用程序,停用surefire概要文件并激活另一个概要文件
这可能行得通,但维护和编码都很困难;) 对,因为它使用类路径,所以我改变了使用包名而不是路径的方法。实际上,将我的集成测试类移动到一个新的包中,如
basepackage.integration
。对我来说,这似乎是一个更干净的解决方案。首先,我建议只需遵循单元和集成测试的命名约定。单元测试*Test.java
和集成测试*IT.java
。如果遵循命名约定,则不需要有不同的目录,并且可以简化配置。Maven基于配置之上的约定。你当然可以自己做事情,但我不建议。。。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>3.0.0-M4</version>
<configuration>
<includes>
<include>**/*IntegrationTest.java</include>
</includes>
</configuration>
<executions>
<execution>
<id>integration-tests</id>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
<configuration>
...
</configuration>
</execution>
</executions>
</plugin>