【问题标题】:How can I run unit tests for just the source files which have changed?如何仅对已更改的源文件运行单元测试?
【发布时间】:2009-06-24 20:43:01
【问题描述】:

有没有办法让 ant 只为它构建的 java 类运行单元测试?例如,如果 MyClass.java 已过期,则 ant 将构建 MyClass.class。之后,我希望它也运行 MyClassTest 和 MyClassTestSuite(如果它们存在)。它不必基于命名约定。我可以使用注释或任何其他有效的方法。

编辑:有几个人说这是个坏主意。如果我计划在不运行所有单元测试的情况下签入,。我的主要项目有超过 16k 的单元测试,运行大约需要 20 分钟。我会在签入前运行它们,但每次更改文件时运行整个套件是完全不切实际的。抱歉,我应该提供更多背景信息。

【问题讨论】:

    标签: java unit-testing ant junit


    【解决方案1】:

    我不推荐这种方法,很有可能会丢失由副作用引入的错误。

    【讨论】:

      【解决方案2】:

      没那么容易……

      看看Atlassian Clover。它具有您梦寐以求的功能,但不是免费的。

      【讨论】:

        【解决方案3】:

        这对我来说似乎是个坏主意。当然,更改后的源文件需要测试,还有依赖于这些文件的任何文件,以及依赖于这些文件的任何文件,等等。您必须跟踪哪个文件依赖于其他文件,这是一个需要解决的相当大的问题。

        在我看来,如果项目足够大,在尝试解决测试的依赖树时有显着的收益,也许项目太大了?也许是时候将其拆分为可以一起工作的单独项目,每个项目都可以彼此分开测试。

        【讨论】:

          【解决方案4】:

          看看 Infinitest,它是 Eclipse(和 Intellij)的一个插件,可以根据您刚刚更改的源文件运行测试:

          Infinitest Website

          有关概述,请参阅此处的截屏视频:

          Screencast Overview

          【讨论】:

          【解决方案5】:

          我不知道用 ANT 可以做到这一点,但你可以在 Eclipse 中做这样的事情。

          Kent Beck 编写了一个名为 JUnit Max 的 Eclipse 插件,它会在您保存代码后运行您的单元测试。它首先运行“最有可能失败”的测试。

          JUnit Max

          【讨论】:

          • MaxCore 更喜欢新测试而不是旧测试、快速测试而不是慢速测试、最近失败的测试而不是很久以前失败的测试。
          【解决方案6】:

          我想和其他人一起说这是你想要避免的事情。只为已更改的特定类运行测试用例会带来风险,即您将进行更改,这会破坏未更改但依赖于某些已更改代码的类的测试。

          即使您非常热衷于对接口进行编程并在单元测试中模拟依赖项,这也是一种风险。例如,静态实用程序类可能有很多类直接使用它们。在这里,很容易想象这样一种情况,您可以对静态实用程序方法进行更改,确保该方法的测试有效,如果您没有运行所有您的测试。

          【讨论】:

            【解决方案7】:

            好吧,如果您遵循命名约定,您可能可以使用变量来实现。获取已更改文件的列表,并运行相应的测试。但我建议不要这样做,就像其他答案解释的那样。

            【讨论】:

              猜你喜欢
              • 2012-11-03
              • 1970-01-01
              • 2012-07-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-06-14
              • 1970-01-01
              • 2011-04-03
              相关资源
              最近更新 更多