我在一个配置文件中有两个可靠的执行 - 它们需要不同的配置。 当我运行 -Dtest=... 时,匹配的测试运行两次 - 每次执行一次。
如何让测试只运行一次? 或者更好的是,我怎样才能确保surefire遵循包含和排除? (一次执行将运行 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>
最佳答案
这听起来像是对 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
...
对于集成测试运行来说,这将是最好的选择。
关于Maven:如何解决 Surefire 的 -Dtest 覆盖包括和排除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7883616/