1

我在一个配置文件中有两个肯定执行 - 他们需要不同的配置。当我运行 -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>
4

2 回答 2

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
 ...

这将是为集成测试运行提供不同配置的最佳选择。

于 2012-03-14T17:49:43.810 回答
1

2.12 版的 maven-surefire-plugin 修复了这个问题。(见http://jira.codehaus.org/browse/SUREFIRE-806

描述添加到 v2.12 的更改:引自 John Casey 对上述 JIRA 链接的评论:

此外,在有多个测试执行块的情况下,为避免在错误的块中运行指定的测试,现在尊重现有的包含/排除...指定的测试现在充当这些包含/排除的精炼过滤器。这意味着在有多个测试执行块的情况下,您无法运行通常仅使用 -Dtest=... 就不会运行的测试。

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

于 2012-03-13T17:23:53.787 回答