是否可以忽略某些单元测试?

时间:2009-10-20 08:36:16

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

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

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

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

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

感谢您的建议

8 个答案:

答案 0 :(得分:17)

您可以配置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 :(得分:8)

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

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

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

[]]

答案 2 :(得分:4)

尝试JUnit假设,这似乎是自4.4以来的

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

答案 3 :(得分:3)

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

答案 4 :(得分:1)

答案 5 :(得分:1)

Maven的Surefire插件:Inclusions and Exclusions of Tests

答案 6 :(得分:1)

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

或者您可以查看构建系统的includes / exludes标记。

答案 7 :(得分:-2)

您需要将以下内容添加到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

- Abhijit Das