2010-10-08 90 views
2

我有测试运行很慢慢,说一个测试,它导出一个大型数据库来测试内存泄漏的导出代码。我想在我平时的测试套件,有这些测试,但除非这些条件之一满足,他们应该被忽略:如何区分“运行所有测试”和“只运行此测试”?

  1. 测试是CI服务器上运行
  2. 用户已经选择了这个测试中IDE并运行它

#1的解决方案很简单:使用属性并跳过测试(如果未设置)。

但是我怎么能实现#2?

[编辑]这是Java特定的。我在Eclipse中使用JUnit 4。

+0

特定IDE,或任何? – Ash 2010-10-08 12:53:30

+0

我使用Java,Eclipse和JUnit 4,但我会接受任何我可以采用的答案。 – 2010-10-08 13:29:57

+0

我在这里推理一下......因为Eclipse允许你在运行配置中设置环境变量,并且如果你愿意为测试设置一个运行配置,你可以在测试中检查环境变量。正在做这样的事情,即使对于你的设置远程有用吗? – Ash 2010-10-08 13:41:40

回答

1

我有测试运行速度非常慢,说一个测试,导出一个大型数据库来测试内存泄漏的导出代码。

虽然有用,但这些不是单元测试,如单元测试标记所示。

测试是不是一个单元测试,如果:

  • 它谈论到数据库
  • 它通过网络
  • 倒是文件系统
  • 它不能在运行通信与任何其他单元测试相同
  • 您必须对环境执行特殊操作(例如编辑配置文件)才能运行它。

做这些事情的测试并不差,当然值得一写。他们甚至可以使用单元测试框架编写。但是,能够将它们与真正的单元测试分开是非常重要的,以便您可以保存一组可以在您进行更改时快速运行的测试,特别是在您希望从失败测试转为通过测试的TDD循环中尽快。

如果您使用的是Makefile,您可以使用check目标进行真正的单元测试,并使用livecheck目标执行这些慢速系统测试。

如何分别运行每个测试将取决于您的框架。

+1

+1获得良好的背景信息和使用'make'的解决方案 – 2010-10-08 13:29:21

1

我们使用Maven,与Eclipse很好地集成。我们使用JUnit为

  • 单元测试,其前缀或Test只是后缀,并且在每一个完整的编译运行
  • 集成测试,它的前缀IntegrationTest。这些只在通过命令行开关(-PintegrationTests)激活特殊的Maven配置文件时运行。

的一套完整的集成测试是CI服务器上或由开发商谁明确规定了上述型材(mvn test -PintegrationTests)每天跑三次。当然,程序员可以随时在IDE中运行单个集成测试。

这是有关部分从pom.xml

<profiles> 
    <profile> 
     <id>integrationTests</id> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <configuration> 
          <includes> 
           <include>**/Test*.java</include> 
           <include>**/*Test.java</include> 
           <include>**/IntegrationTest*.java</include> 
         </includes> 
         </configuration> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles>