【问题标题】:How to exclude specific unit tests from default "maven test" and eclipse "run as junit test"如何从默认的“maven test”和eclipse“run as junit test”中排除特定的单元测试
【发布时间】:2013-03-08 10:56:13
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 类似于this new question,专注于在 IntelliJ/Eclipse 中没有额外的配置来默认排除慢速测试。

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


【解决方案1】:

我们在项目中所做的是使用特殊的标记界面标记慢速单元测试。 @Cathegory(SlowTest.class) 注释并将它们添加到故障安全插件中。

<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。这将跳过它们。

【讨论】:

  • 我应该在com.whatever.SlowTest 中输入什么? -DskipITs 怎么知道要跳过什么?我看不到 XML 中的配置与“skipITs”之间的任何关系。请记住,Maven 对我来说是个谜,我只是想完成一些事情。
【解决方案2】:

使用profiles,您可以默认启用一个排除慢速测试的活动,并使用另一个来运行所有测试。

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

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

这样,当您运行一个简单的mvn install 时,只有选择的配置文件是fastTestOnly

【讨论】:

  • 感谢苯佐尼科。这完全解决了我的问题,它让我意识到我可能需要编辑这个问题,因为它没有捕捉到一个额外的情况。当我右键单击 src/test/java 并选择 run as junit test 时,它仍然包括默认未激活的其他配置文件中的慢速性能测试。知道如何解决这个问题吗?
  • 问题是最后一个问题与 Eclipse 配置有关,而不是 maven。
【解决方案3】:

您问题的本机 Junit 案例只能通过将不同的测试保存在不同的源文件夹(或包)中来解决 AFAIK,然后转到“在...中运行所有测试”的运行配置并将测试限制为根据具体的源码文件夹(或包)运行。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-30
    • 2019-07-26
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    相关资源
    最近更新 更多