【问题标题】:How can I switch between two test suites in Maven 2?如何在 Maven 2 中的两个测试套件之间切换?
【发布时间】:2012-03-20 23:05:53
【问题描述】:

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

  • 快速测试
  • 缓慢的测试

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

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

在 CI 服务器上,我想同时运行两者。

当慢速测试包含快速测试时,这是可以的(甚至是首选)。

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

【问题讨论】:

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


    【解决方案1】:

    您应该使用来自 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>
    

    【讨论】:

      【解决方案2】:

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

      这赋予了使用简单命令运行测试组的能力:mvn test 用于 UT,mvn integration-test 用于 UT 和 IT,以及使用 mvn install -DskipITs 仅跳过 IT 的可能性。

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

      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-failsafe-plugin</artifactId>
          <version>2.6</version>
          <executions>
              <execution>
                  <id>integration-test</id>
                  <goals>
                      <goal>integration-test</goal>
                  </goals>
              </execution>
              <!-- Uncomment this in order to fail the build if any integration test fail -->
              <!-- execution> <id>verify</id> <goals><goal>verify</goal></goals> </execution -->
          </executions>
      </plugin>
      

      【讨论】:

        猜你喜欢
        • 2016-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多