如何从默认"maven test"和日食"run as junit test"中排除特定的单元测试



在我的代码中,我有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情况只能通过在不同的源文件夹(或包)中保存不同的测试并在"在…中运行所有测试"处运行配置并限制测试根据特定的源文件夹(或包)运行来解决。

我知道没有通用的方法来实现这一点,但是为每个项目创建一个新的运行配置集(通过复制现有的配置集)并删除那些不再相关的配置集并不太麻烦。

最新更新