2009-10-20 126 views
10

我目前正在研究一个在所有模块中广泛使用JUnit4的项目。我们使用Maven2来构建项目和Hudson以实现持续集成。该项目是在Java 1.5下构建和运行的。是否可以忽略某些单元测试?

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

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

将这些特定的测试放在一个普通的类中可能会有其他选择,但这并不理想。

感谢您的建议

回答

15

可以配置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其中所有测试将被例如运行由哈德森。在开发模式下,您可以使用所有测试的子集来加速开发(或者所有测试可能都在默认配置文件中,选择dev配置文件中的测试 - 因此您需要使用-PprofileName属性运行maven)。这个例子更适合采用loger运行的集成测试。

+0

配置文件+1(关于集成测试,我宁愿将它们放在'src/test/it'中,并在'integration-test'阶段运行它们) – 2009-10-20 09:51:45

+0

非常感谢,我会仔细研究一下两种解决方案并决定最适合哪种。 – 2009-10-20 10:11:24

+0

@詹姆斯。注意配置文件的解决方案也需要安全的插件配置。 @Pascal。是的,你是对的,我和你一样。但有时写一个*纯粹*单元测试是很困难的,并且一直是一个测试多一点的诱惑,仍然称之为*单元测试* :) – cetnar 2009-10-20 10:22:44

3

我从来没有尝试过,但你可以把额外的测试,在不同的源文件夹,并配置构建脚本根据您的构建目标包含或排除呢?

+0

有趣的,而不是一个坏主意。如果没有其他事情出现,我会研究它。欢呼 – 2009-10-20 08:40:38

1

的JUnit 4.7,我相信支持“规则”对这种事情(预4.7,我认为你可以有谁还会检查一个环境变量中使用自定义的运动员)。

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

8

有一个“忽略”注释,但它是手动工作添加它们,不知道是否有帮助。
它可用于测试方法或全班

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

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

[]