【问题标题】:Using JUnit Categories with Maven Failsafe plugin使用带有 Maven Failsafe 插件的 JUnit 类别
【发布时间】:2012-07-17 13:21:51
【问题描述】:

我正在使用 JUnit 类别将集成测试与单元测试分开。 Surefire 插件配置有效 - 它跳过使用我的标记接口 IntegrationTest 注释的测试。

但是,Failsafe 插件不选择集成测试。我什至尝试指定 junit47 提供程序,但在集成测试阶段运行零测试。

这里是 pom.xml 片段:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.12</version>
            <executions>
                <execution>
                    <goals>
                        <goal>integration-test</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <groups>com.mycompany.test.IntegrationTest</groups>
                <excludedGroups>com.mycompany.test.UnitTest</excludedGroups>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.apache.maven.surefire</groupId>
                    <artifactId>surefire-junit47</artifactId>
                    <version>2.12</version>
                </dependency>
            </dependencies>
        </plugin>

这是日志的故障安全部分:

[INFO] --- maven-failsafe-plugin:2.12:integration-test (default) @ MyProject.war ---
[INFO] Failsafe report directory: /home/stoupa/MyProject/war/target/failsafe-reports
[INFO] Using configured provider org.apache.maven.surefire.junitcore.JUnitCoreProvider

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Concurrency config is parallel='none', perCoreThreadCount=true, threadCount=2, useUnlimitedThreads=false

Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

日志输出中可以看到的提供者org.apache.maven.surefire.junitcore.JUnitCoreProvider是不是对的?

【问题讨论】:

  • 为什么不使用命名约定来进行 maven-failsafe-plugin 的集成测试?可能更简单。
  • 我在这里也遇到了同样的情况。当用surefire替换故障安全时,一切正常......

标签: java unit-testing maven junit maven-failsafe-plugin


【解决方案1】:

解决方法

@Categories 会给您带来麻烦,因为您必须标记每个集成测试。

尝试创建如下所述的 inttests 配置文件并跳过肯定执行。

 <profile>
        <id>inttests</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <build>
            <plugins>
                <!-- skip the unit tests -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <configuration>
                        <skip>true</skip>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <configuration>
                        <includes>
                            <include>**/IT*.java</include>
                        </includes>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>

使用一些字符串为集成测试添加前缀或后缀,并在包含中给出。 默认情况下,故障安全将所有以 IT 为前缀的测试作为集成测试。 参考: Failsafe Inclusions & Exclusions

使用 maven profile 命令运行它

mvn verify -P inttests

注意:在上面提到的方法中,我们需要在构建过程中运行单元测试,然后分别进行inttests。

更新:使用故障安全插件的 JUnit4 类别

  • 2.12 - 分叉的 VM 没有正确告别就终止了。 VM 崩溃或 System.exit 调用? https://issues.apache.org/jira/browse/SUREFIRE-827
  • 2.12.1 - 无法在插件工件列表中找到 surefire-booter https://issues.apache.org/jira/browse/SUREFIRE-896
  • 2.12.2 - 有一个错误,当模块中没有测试时,它会查找 failsafe-summary.xml 并失败 https://issues.apache.org/jira/browse/SUREFIRE-901
  • 【讨论】:

    • 你不需要标记每个测试,创建一个带注释的超类并从它继承就足够了。无论如何,我不明白给每个类添加注释比将它们命名为 IT* 更痛苦*跨度>
    • 这个答案并没有真正回答这个问题,它是一种解决方法。我有同样的问题。这是一个错误吗?
    • 同样的问题...有人知道解决方案吗? 有效!
    • @hithwen 我提到了解决我们面临的问题的痛苦,因为类别注释带有故障安全。我只是将其编辑为一种解决方法,这就是我尝试解决它的方法。
    【解决方案2】:

    默认情况下,故障保护插件会排除各种文件。你必须覆盖它。因此,将您的配置部分更改为以下内容:

    <configuration>
        <includes>
            <include>**/*.java</include>
        </includes>
        <groups>com.mycompany.test.IntegrationTest</groups>
        <excludedGroups>com.mycompany.test.UnitTest</excludedGroups>
    </configuration>
    

    【讨论】:

    • 是的,默认情况下,它只包含与用于集成测试的特定模式匹配的 Java 文件(例如“*IT.java”)。如果您使用类别而不是文件名匹配,则需要删除文件名匹配条件。
    猜你喜欢
    • 2015-05-13
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 2012-02-14
    • 1970-01-01
    相关资源
    最近更新 更多