【问题标题】:How can I distinguish between "run all tests" and "run just this test"?如何区分“运行所有测试”和“仅运行此测试”?
【发布时间】:2010-10-08 12:48:19
【问题描述】:

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

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

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

但是我该如何实现#2?

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

【问题讨论】:

  • 我使用 Java、Eclipse 和 JUnit 4,但我会接受任何其他我可以采用的答案。
  • 我在这里有点理论...因为 Eclipse 允许您在运行配置中设置环境变量,如果您愿意为测试设置运行配置,您可以检查对于测试中的环境变量。做这样的事情对您的设置是否有用?
  • 我正在寻找的是可以让我快速运行单个测试的东西。如果我使用变量/属性,那么我需要更改启动配置。我更喜欢的是:选择测试,点击弹出菜单中的“运行”,它就会运行,即使它是一个缓慢的测试。

标签: java unit-testing performance testing skip


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

    为此我们使用 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-31
      • 2011-05-31
      • 1970-01-01
      相关资源
      最近更新 更多