如何在Maven 2中的两个测试套件之间切换?

时间:2012-03-02 12:35:52

标签: unit-testing maven junit integration-testing maven-surefire-plugin

我们正在使用maven-surefire-plugin来运行我们的Java测试。测试分为两类:

  • 快速测试
  • 慢速测试

整个“快速”套件在几秒钟内运行,而慢速测试需要半小时。

在开发过程中,我想只运行快速测试。当我提交时,我也希望能够运行慢速测试,因此运行慢速测试应该是一个选项,而快速测试应该是默认测试。

在CI服务器上,我想同时运行它们。

当慢速测试包括快速测试时,它可以(甚至是首选)。

我应该如何为这种情况设置Maven,JUnit和Surefire?

2 个答案:

答案 0 :(得分:3)

您应该使用junit中的类别:Junit category

第一个解决方案

配置maven-surefire-plugin版本至少2.11

     <profile>
                    <id>normal</id>
                    <activation>
                            <activeByDefault>true</activeByDefault>
                    </activation>
                    <build>
                            <plugins>
                                    <plugin>
                                            <groupId>org.apache.maven.plugins</groupId>
                                            <artifactId>maven-surefire-plugin</artifactId>
                                            <configuration>
                                                    <excludedGroups>com.test.SlowTests</excludedGroups>
                                            </configuration>
                                    </plugin>
                            </plugins>
                    </build>
            </profile>

第二个解决方案

在配置部分,您可以添加带有文件的正则表达式,以仅支持类(默认配置):

           <configuration>
                <includes>
                    <include>**/*Test*.java</include>
                    <include>**/*Test.java</include>
                    <include>**/*TestCase.java</include>
                </includes>
            </configuration>

答案 1 :(得分:1)

在我自己从零开始制作的商业项目中,我将测试分为单元(我将其命名为*Test.java)和集成(*IT.java),分别根据Surefire和故障安全插件策略,我用它来运行测试。当然,IT运行速度比UT慢得多。

这为使用简单命令运行测试组提供了强大的功能:UT为mvn test,UT和IT为mvn integration-test,以及仅使用{{1}跳过IT的可能性}。

另一个好处是集成测试结果可能更加宽松,因为它们比单元测试更容易失败,因为环境问题(即数据库启动时间过长,消息代理过早关闭,以及等等)。默认情况下,失败的Failsafe测试不会终止构建,除非您明确包含“验证”目标:

mvn install -DskipITs