我希望在maven中运行一些集成测试,并使用类似的东西按类别对它们进行分组:
接口:
package com.path.for.testing;
public interface SlowTests {
}
测试类:
import com.path.for.testing.SlowTests
@Category(SlowTests.class)
public class SlowTest {
...
}
Pom文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
...
<profiles>
...
<profile>
<id>functional-test-slow-tests</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
<configuration>
<groups>com.path.for.testing.SlowTests</groups>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
我运行它:mvn clean install -P functional-test-slow-tests
我的问题是,当它运行时,似乎循环所有测试,而不仅仅是指定的测试。分类不适用于综合测试吗?或者我做错了什么?我会根据要求更新更多信息。对这个问题的任何帮助或指导都非常感激,我是新手,我很可能会遗漏一些明显的东西。感谢。
编辑以响应User944849:
使用-X参数运行时,我认为故障安全插件会多次执行。我还添加了您建议的新执行ID。这是我在项目构建时得到的结果:
[DEBUG] -----------------------------------------------------------------------
[DEBUG] Goal: org.apache.maven.plugins:maven-failsafe-plugin:2.12:integration-test (default-integration-tests)
[DEBUG] Style: Regular
[DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?>
...
[DEBUG] -----------------------------------------------------------------------
[DEBUG] Goal: org.apache.maven.plugins:maven-failsafe-plugin:2.12:verify (default-integration-tests)
[DEBUG] Style: Regular
[DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?>
测试使用您建议的新ID,但我仍然得到相同的结果,即不需要的测试仍在运行。
答案 0 :(得分:2)
如果您使用-X
运行,您是否看到failafe插件的多次执行?显示的配置不包含<id>
,因此Maven可能会将您配置的执行添加到其默认值。默认运行符合模式**/IT*.java
,**/*IT.java
,**/*ITCase.java
的所有测试。
如果发生了这种情况,请在执行中添加<id>
,如下所示:
<execution>
<id>default-integration-tests</id>
....
将重新定义Maven在集成测试阶段的默认插件执行,以执行您想要的操作。
更新
@Brad,感谢您测试我的理论,而@khmarbaise感谢给了我另一个想法。
2个目标执行是你应该拥有的。我没有看到你的配置有什么问题,所以我检查了故障安全插件的开放JIRA,我发现了possibly related issue可能导致使用错误的JUnit提供程序。如果这是您遇到的问题,您可能必须在插件配置中手动指定JUnit47提供程序,如定义here。