Maven:如何解决Surefire的-Dtest覆盖包含和排除?

时间:2011-10-25 01:01:18

标签: maven include execution surefire

我在一个配置文件中有两个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>

2 个答案:

答案 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 = ...来运行通常不会运行的测试。

     

如果只有一个测试执行块,指定的测试应该像以前一样覆盖包含。