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

标签 maven include execution surefire

我在一个配置文件中有两个可靠的执行 - 它们需要不同的配置。 当我运行 -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/

相关文章:

java - Maven清理包,错误为找不到 "Invalid PropertyValueException"的符号

java - java代码执行中的多个main()

C++ MSVS dll header #include 问题

php - php Include 是否锁定文件?

javascript - 在 HTML 文件中包含另一个 HTML 文件

c++ - 为什么内联汇编程序在此代码中有时更快而有时更慢?每次运行的执行时间变化很大

java - 我可以获得java程序测试用例的执行跟踪吗?

java - 配置问题 : spring-security-web classes are not available. 你需要这些才能使用 <filter-chain-map>

eclipse - 在 eclipse 和 tomcat 中测试 maven web 模块

java - Maven:不可解析的 POM