我有一些运行速度很慢的测试,比如一个导出大型数据库以测试导出代码是否存在内存泄漏的测试。我想在我常用的测试套件中进行这些测试,但除非满足以下条件之一,否则它们应该被忽略:
- 测试在 CI 服务器上运行
- 用户已在 IDE 中选择此测试并运行它
#1 的解决方案很简单:使用属性并在未设置的情况下跳过测试。
但我怎么能实现#2?
[编辑] 这是 Java 特定的。我将 JUnit 4 与 Eclipse 一起使用。
我有一些运行速度很慢的测试,比如一个导出大型数据库以测试导出代码是否存在内存泄漏的测试。我想在我常用的测试套件中进行这些测试,但除非满足以下条件之一,否则它们应该被忽略:
#1 的解决方案很简单:使用属性并在未设置的情况下跳过测试。
但我怎么能实现#2?
[编辑] 这是 Java 特定的。我将 JUnit 4 与 Eclipse 一起使用。
我有一些运行速度很慢的测试,比如一个导出大型数据库以测试导出代码是否存在内存泄漏的测试。
虽然有用,但它们不是单元测试,如 unit-test 标签所示。
如果满足以下条件,则测试不是单元测试:
做这些事情的测试还不错,当然值得编写。它们甚至可以使用单元测试框架编写。但是,能够将它们与真正的单元测试分开是很重要的,这样您就可以保留一组测试,以便在您进行更改时快速运行,特别是在您希望从失败测试到通过测试的 TDD 周期中尽快。
如果您使用的是,Makefile
您可以有一个check
真正的单元测试livecheck
目标和这些慢速系统测试的目标。
如何单独运行每个测试将取决于您的框架。
为此,我们使用 Maven,它与 Eclipse 很好地集成。我们使用 JUnit
Test
并在每个完整构建上运行IntegrationTest
. 这些仅在通过命令行开关 (-PintegrationTests) 激活特殊 Maven 配置文件时运行。完整的集成测试集每天在 CI 服务器上运行 3 次,或者由明确指定上述配置文件 ( 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>