我在一个配置文件中有两个surefire执行 - 它们需要不同的配置。 当我运行-Dtest = ...时,匹配测试运行两次 - 每次执行一次。
如何只进行一次测试? 或者更好的是,我如何确保包含和排除? (一次执行将运行0次测试;我将使用-DfailIfNoTest = false。)
<profile>
<id>clustering.integration.tests.profile</id>
<activation>
<property>
<name>clustering.integration.tests</name>
<value>true</value>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<executions combine.children="append">
<!-- Disable default-test execution. -->
<execution>
<id>default-test</id>
<goals><goal>test</goal></goals>
<phase>none</phase>
</execution>
<!-- Single node clustering tests. -->
<execution>
<id>tests-clustering-single-node.surefire</id>
<phase>test</phase>
<goals><goal>test</goal></goals>
<configuration>
<includes>
<include>org/jboss/as/test/clustering/single/**/*TestCase.java</include>
</includes>
</configuration>
</execution>
<!-- Multi node clustering tests. -->
<execution>
<id>tests-clustering-multi-node.surefire</id>
<phase>test</phase>
<goals><goal>test</goal></goals>
<configuration>
<includes>
<include>org/jboss/as/test/clustering/cluster/**/*TestCase.java</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
答案 0 :(得分:2)
这听起来像是对maven-surefire-plugin的误用,因为你似乎有某种集成测试应该由maven-failsafe-plugin来完成。通过使用它们,您可以自动为单元和集成测试配置不同的配置。 maven-surefire-plugin旨在运行单元测试,其中maven-failsafe-plugin旨在运行集成测试。此外,您的配置看起来需要不同类型的集成测试,换句话说,这意味着需要多个集成测试模块。
+-- pom.xml
+-- module-1
+-- module-2
+-- integration-test-single-node
+-- integration-test-multi-node
...
这将是集成测试运行的不同配置的最佳选择。
答案 1 :(得分:1)
maven-surefire-plugin的2.12版修复了这个问题。 (见http://jira.codehaus.org/browse/SUREFIRE-806)
描述添加到v2.12的更改: 引自John Casey对上述JIRA链接的评论:
此外,在存在多个测试执行块的情况下,为了避免在错误的块中运行指定的测试,现在的包含/排除现在得到尊重...指定的测试现在充当这些包括/的精炼过滤器排除。这意味着在存在多个测试执行块的情况下,您无法再通过使用-Dtest = ...来运行通常不会运行的测试。
如果只有一个测试执行块,指定的测试应该像以前一样覆盖包含。