有没有办法让ant运行单元测试只针对它构建的java类?例如,如果MyClass.java已过期,则ant将构建MyClass.class。之后,我希望它也运行MyClassTest和MyClassTestSuite(如果它们存在)。它不必基于命名约定。我可以使用注释或任何其他有效的方法。
编辑:有几个人说这是个坏主意。如果我计划在不运行所有单元测试的情况下进行检查,那么就会。我的主项目有超过16,000个单元测试,大约需要20分钟才能运行。我会在办理登机手续之前运行它们,但每次更改文件时运行整个套件都是不切实际的。对不起,我应该给出更多背景信息。
答案 0 :(得分:6)
我不推荐这种方法,很有可能错过副作用带来的错误。
答案 1 :(得分:4)
这并不容易......
看看Atlassian Clover。它具有你梦寐以求的功能,但它不是免费的。
答案 2 :(得分:4)
这对我来说似乎是一个坏主意。当然,更改的源文件需要测试,还有任何依赖于这些文件的文件,以及任何依赖于这些文件的文件等。您必须跟踪哪个文件取决于其他文件,这是一个相当大的问题需要解决。 / p>
在我看来,如果项目足够大以至于在尝试解决测试依赖树方面有很大的好处,那么项目可能太大了?也许现在是时候把它分成一起工作的单独项目,每个项目都可以相互分开测试。
答案 3 :(得分:3)
看看Infinitest,它是Eclipse(和Intellij)的一个插件,它根据您刚刚更改的源文件运行测试:
有关概述,请参阅此处的截屏视频:
答案 4 :(得分:3)
我不知道用ANT做到这一点,但你可以在Eclipse中做这样的事情。
Kent Beck编写了一个名为JUnit Max的Eclipse插件,在您保存代码后运行单元测试。它首先运行“最有可能失败”的测试。
答案 5 :(得分:0)
我想与其他人说过这是你想要避免的事情。仅运行已更改的特定类的测试用例会带来一种风险,即您将进行更改,该更改会中断对未更改但依赖于某些已更改代码的类的测试。
即使您在接口编程和在单元测试中模拟依赖关系时,这也是一种风险。例如,静态实用程序类可能有很多类直接使用它们。在这里,很容易想象一个案例,你可以对静态实用程序方法进行更改,确保该方法的测试有效,如果你没有运行所有的方法,就会破坏大量调用该方法的代码测试
答案 6 :(得分:0)
好吧,如果遵循命名约定,你可以使用变量来完成它。获取已更改文件的列表,然后运行相应的测试。但我建议反对它,就像其他答案解释一样。