【问题标题】: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>