在我的父pom上执行mvn clean install
构建所有子模块并运行相关的junit测试。它不运行集成测试。
在构建并运行junits之后,我想在特定的子模块中运行特定的集成测试。
我正在使用以下命令:
mvn clean install -DTest=integrationTestName
作业失败,在构建阶段出现No Test Found
错误。
我也尝试过使用
mvn clean install -DTest=integrationTestName -pl=sub-module-name
但这只会构建我的子模块进行集成测试。
问题:如何运行某个模块的单一集成测试?
答案 0 :(得分:4)
我想您尝试使用Maven Surefire插件的test
选项(小写)来调用特定测试,Surefire无法在反应堆构建的第一个模块中找到并因此失败。 / p>
我还假设集成测试由Maven Failsafe Plugin执行。如果没有,他们应该如官方文件所述:
Failsafe插件旨在运行集成测试,而Surefire插件则用于运行单元测试。 ...如果您使用Surefire插件运行测试,那么当您遇到测试失败时,构建将停止在
integration-test
阶段,并且您的集成测试环境将不会被正确拆除。 ..在integration-test
阶段,Failsafe插件不会使构建失败,从而使post-integration-test
阶段能够执行。
简而言之:这样做更安全,更健壮。
虽然Maven Failsafe插件的插件配置条目也是test
,但其相应的命令行选项为it.test
,因此您应该运行:
mvn clean install -Dit.test=SampleIT
其中SampleIT
是集成测试(请注意标准IT
后缀,recognized by default由Failsafe。
官方Running a Single Test文档还提供了有关运行单一集成测试的更多详细信息。
另请注意:如果您未在构建的其他模块中进行其他集成测试,则上述调用将起作用,否则将无法在之前找到它(在点击相关模块之前)。
如果您正在使用Surefire运行相关的集成测试(同样,您不应该),或者您有几个模块正在运行集成测试,那么您应该在相关模块中配置一个配置文件来处理这个特定的调用,如下所示:
<profiles>
<profile>
<id>run-single-it-test</id>
<activation>
<property>
<name>single.it.test</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<test>${single.it.test}</test>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
然后按如下方式调用构建:
mvn clean install -Dsingle.it.test=SampleIT
因此,Maven将activate the profile基于single.it.test
属性的值的存在,并将其传递给Failsafe插件的test
属性(或Surefire,如果它如果是这样的话,Failsafe将忽略该执行的任何其他集成测试,其他模块不会受到任何影响(忽略该属性)。
答案 1 :(得分:2)
A_Di-Matteo的答案可以帮助你完成大部分工作,但是你需要maven-surefire-plugin的以下配置来抑制所有的单元测试。
<profiles>
<profile>
<id>run-single-it-test</id>
<activation>
<property>
<name>single.it.test</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
<failIfNoTests>false</failIfNoTests>
</configuration>
<executions>
<execution>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<test>${single.it.test}</test>
<failIfNoTests>false</failIfNoTests>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>