【问题标题】:Is it possible to ignore certain unit tests?是否可以忽略某些单元测试?
【发布时间】:2010-12-08 06:29:03
【问题描述】:

我目前正在开发一个在所有模块中都广泛使用 JUnit4 的项目。我们使用 Maven2 构建项目,使用 Hudson 进行持续集成。该项目是在 Java 1.5 下构建和运行的。

我们最近添加了大量的单元测试,这些单元测试有时需要,但不希望在构建过程中运行(但同一项目中的其他单元测试可以)。

我想知道是否有某种注释可以应用于测试,或者可以对 Maven 进行的某些配置会忽略在构建时存在于某个包下或某个测试类中的单元测试?

也可能只是将这些特定测试放在一个通过 main 运行的普通类中,但这并不理想。

感谢您的建议

【问题讨论】:

    标签: java unit-testing maven-2 junit annotations


    【解决方案1】:

    您需要将以下内容添加到您的 POM.xml 中

    <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-surefire-plugin</artifactId>
       <version>2.12.4</version>
       <configuration>
          <skipTests>true</skipTests>
       </configuration>
     </plugin>
    

    查看此网址http://maven.apache.org/surefire/maven-surefire-plugin/examples/skipping-test.html

    --阿比吉特·达斯

    【讨论】:

      【解决方案2】:

      尝试 JUnit Assumptions,它似乎是从 4.​​4 开始的

      假设您可以在运行时检测是否应该运行测试(通过定义、属性等),这将允许您保持一个干净整洁的测试套件。

      【讨论】:

        【解决方案3】:

        有一个“忽略”注释,但添加它们是手动工作,不确定是否有帮助。
        它可以用于测试方法或整个类

        @Ignore("not ready yet") @Test public void testSomething() {...
        

        @Ignore public class SomeTest {
            @Test public void testSomething() {...
        }
        

        []]

        【讨论】:

          【解决方案4】:

          我相信 JUnit 4.7 支持此类事情的“规则”(4.7 之前我认为您可以使用会检查环境变量的自定义 Runners)。

          或者您可以查看构建系统的包含/排除标签。

          【讨论】:

            【解决方案5】:

            Maven 的 Surefire 插件:Inclusions and Exclusions of Tests

            【讨论】:

            • 该死,我没注意到我刚才打开了这个问题:)
            【解决方案6】:

            您可以配置maven-surefire-plugin

            例如:

            <project>
            <build>
            <plugins>
              <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.4.2</version>
                <configuration>
                  <excludes>
                    <exclude>**/TestCircle.java</exclude>
                    <exclude>**/TestSquare.java</exclude>
                  </excludes>
                </configuration>
              </plugin>
            </plugins>
            

            编辑:
            另一种解决方案是定义profiles,所有测试都将在其中运行,例如通过哈德逊。在开发模式下,您可以使用所有测试的子集来加速开发(或者所有测试都可能在默认配置文件中,在开发配置文件中选择测试 - 所以您需要运行带有 -PprofileName 属性的 maven)。此示例更适合需要运行 loger 的集成测试。

            【讨论】:

            • +1 用于配置文件(关于集成测试,我宁愿将它们放在src/test/it 并在integration-test 阶段运行它们)
            • 太好了,谢谢你,我会看看这两种解决方案,然后决定哪一种最适合。
            • @詹姆斯。请注意,带有配置文件的解决方案还需要确保插件配置。 @帕斯卡。是的,你是对的,我和你一样。但有时编写一个单元测试是很困难的,而且总是很想多测试一点,仍然称它为单元测试 :)
            【解决方案7】:
            【解决方案8】:

            我从未尝试过,但您能否将附加测试放在不同的源文件夹中,并根据您的构建目标配置您的构建脚本以包含或排除它?

            【讨论】:

            • 有趣,不错的主意。如果没有其他问题,我会调查一下。干杯
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-12-22
            • 2017-04-19
            • 1970-01-01
            • 2017-04-01
            • 2013-11-18
            • 2016-02-25
            相关资源
            最近更新 更多