如何从默认的“maven test”和eclipse“run as junit test”中排除特定的单元测试

时间:2013-03-19 16:26:22

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

在我的代码中,我有两种类型的测试:快速单元测试慢速性能测试。我试图确保性能测试永远不会运行,除非用户明确想要运行它们(例如使用正确的测试套件或maven构建配置文件),因为这会对网格上计算密集的远程进程起作用。

我了解如何创建使用maven-surefire-plugin排除(或包含)特定测试的构建配置文件,如此site所述。但是,我遇到的问题是,我还没有找到从默认运行中排除测试的方法,同时仍然提供了在需要时运行测试的选项。默认情况下,我的意思是:

  • 在eclipse中右键单击项目并选择“run as | Maven test”
  • 右键单击src / test / java并选择run as junit test

在上述两种情况下,它都运行所有单元测试(包括我希望默认排除的慢速测试)。如果我尝试运行的构建配置文件中存在拼写错误,则会发生同样的事情。

有没有办法可以从默认运行中排除性能测试而不必将它们移动到单独的maven模块?

3 个答案:

答案 0 :(得分:2)

我们在项目中所做的是使用特殊标记界面标记慢速单元测试。 @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。这将跳过它们。

答案 1 :(得分:1)

使用profiles,默认情况下可以激活一个,排除慢速测试并使用另一个激活测试。

您必须在fastTestOnly个人资料中指定这些标记:

<profiles>
  <profile>
    <id>fastTestOnly</id>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
    ...
  </profile>
</profiles>

这样,当您运行简单的mvn install时,只会选择的个人资料为fastTestOnly

答案 2 :(得分:0)

你的问题的原生Junit案例只能通过在不同的源文件夹(或包)中保存不同的测试来解决AFAIK,并在“运行所有测试...”中转到运行配置并将测试限制为根据特定的源文件夹(或包)运行。

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