2

我有一些运行速度慢的测试,比如一个导出大型数据库以测试导出代码是否存在内存泄漏的测试。我想在我常用的测试套件中进行这些测试,但除非满足以下条件之一,否则它们应该被忽略:

  1. 测试在 CI 服务器上运行
  2. 用户已在 IDE 中选择此测试并运行它

#1 的解决方案很简单:使用属性并在未设置的情况下跳过测试。

但我怎么能实现#2?

[编辑] 这是 Java 特定的。我将 JUnit 4 与 Eclipse 一起使用。

4

2 回答 2

1

我有一些运行速度很慢的测试,比如一个导出大型数据库以测试导出代码是否存在内存泄漏的测试。

虽然有用,但它们不是单元测试,如 unit-test 标签所示。

如果满足以下条件,则测试不是单元测试:

  • 它与数据库对话
  • 它通过网络进行通信
  • 它涉及文件系统
  • 它不能与您的任何其他单元测试同时运行
  • 你必须对你的环境做一些特殊的事情(比如编辑配置文件)来运行它。

做这些事情的测试还不错,当然值得编写。它们甚至可以使用单元测试框架编写。但是,能够将它们与真正的单元测试分开是很重要的,这样您就可以保留一组测试,以便在您进行更改时快速运行,特别是在您希望从失败测试到通过测试的 TDD 周期中尽快。

如果您使用的是,Makefile您可以有一个check真正的单元测试livecheck目标和这些慢速系统测试的目标。

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

于 2010-10-08T12:59:02.650 回答
1

为此,我们使用 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>
于 2010-10-08T14:07:37.967 回答