在我的代码中,我有2种类型的测试:快速单元测试和慢性能测试。我试图确保性能测试永远不会运行,除非用户明确想要运行它们(例如,使用正确的测试套件或maven构建配置文件),因为这会触发网格上计算密集型的远程进程。
我了解如何使用maven-surefire-plugin创建排除(或包含)特定测试的构建配置文件,如本网站所述。然而,我遇到的问题是,我没有找到一种方法来从默认运行中排除测试,同时仍然提供在需要时运行测试的选项。默认情况下,我的意思是:
- 右键单击eclipse中的项目,选择"run as| Maven test" 右键单击src/test/java,选择run as junit test
在上面两种情况下,它运行所有单元测试(包括我希望在默认情况下排除的慢测试)。如果在我尝试运行的构建配置文件中有错别字,也会发生同样的事情。
是否有一种方法可以从默认运行中排除性能测试,而不必将它们移动到单独的maven模块?
我们在项目中所做的是用一个特殊的标记接口标记慢的单元测试。@Cathegory(SlowTest.class)
注释,并添加到failsafe插件。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<groups>com.whatever.SlowTest</groups>
</configuration>
<executions>
<execution>
<configuration>
<includes>
<include>**/*.class</include>
</includes>
</configuration>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
</executions>
如果你不想执行它们:使用maven选项-DskipITs。
使用profiles
,您可以在默认情况下使一个活动,排除慢速测试,并使用另一个运行所有测试。
你必须在你的fastTestOnly
配置文件中指定这些标签:
<profiles>
<profile>
<id>fastTestOnly</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
...
</profile>
</profiles>
这样,当您运行一个简单的mvn install
时,只有选择的配置文件是fastTestOnly
。
你的问题的原生Junit情况只能通过在不同的源文件夹(或包)中保存不同的测试并在"在…中运行所有测试"处运行配置并限制测试根据特定的源文件夹(或包)运行来解决。
我知道没有通用的方法来实现这一点,但是为每个项目创建一个新的运行配置集(通过复制现有的配置集)并删除那些不再相关的配置集并不太麻烦。