与jUnit相比,TestNG的缺点是什么?

13

我熟悉jUnit,听说TestNG可能是解决jUnit一些烦人问题的方法,例如jUnit坚持为每个测试创建一个单独的测试类实例,因此强制我使用静态字段来在测试之间重用对象。

(假设您同意我这是一个缺点,并且不将这个问题转化为其他内容)

我这里想问的是,与jUnit相比,TestNG有哪些缺点?假设这是一个新项目,没有任何迁移成本,为什么不使用TestNG呢?


您知道在测试之间重复使用对象会增加测试之间的耦合吗?耦合的测试是良好单元测试的最大问题,因为它们可能导致一个测试中的问题导致另一个测试失败(或引发异常)... - Donal Fellows
@Donal - 我们不要让这个问题变成关于这个的。当编写具有许多组件的重度集成测试时,不重用是另一个祸根,因为它可能会导致测试运行需要数小时。 - ripper234
同意;这是一个次要问题。 - Donal Fellows
5
在测试之间重复使用对象并不会增加测试之间的耦合性,特别是如果这些对象是不可变的。这样做的好处是不必一遍又一遍地创建昂贵的对象。TestNG让您可以选择两种方法,而JUnit则强制您只能采用一种方法。 - Cedric Beust
4个回答

7

我是TestNG的创建者。由于我显然有偏见,因此我不会表态,但我很乐意回答您对TestNG的任何问题。

Andy:感谢您的评论。供您参考(您可能已经知道了,但也许原始帖子不知道),这里有一个TestNG Eclipse插件(与TestNG并行开发)。


你好 :) 很高兴“见”到你,我喜欢在SO上认识新朋友。我现在使用TestNG已经有大约10分钟了... 为什么你选择不使用@Ignore属性呢?我喜欢@Ignore的原因是你可以在注释中指定忽略的原因,而且据我所知,你不能用“enabled=false”来实现这一点。 - ripper234
3
在 TestNG 中,你可以使用 "@Test(enabled = false)" 来标记测试用例为忽略状态。这样做可以帮助初学者更方便地发现测试用例(只需要输入"@Test(" 然后按下控制空格键,就可以得到所有可用属性的列表)。 - Cedric Beust

5

与JUnit相比,我个人没有遇到任何显著的缺点。

在新项目开始时,我的团队转向了TestNG,并且没有后悔过。TestNG比单元测试更加强大,支持更广泛的用途。

一些工具支持JUnit但不支持TestNG。这些是我尚未需要的工具。例如:

  • Google的CodePro Analytix支持生成JUnit单元测试
  • Eclipse IDE用于RCP开发,支持“JUnit插件测试”的运行/调试配置。

3
作为一名TestNG的狂热支持者,我仍然看到有许多工具开发者将其视为次等选择。很多工具和库从一开始就支持JUnit,但你必须等到它们也实现对TestNG的支持。如果你计划使用一些最新的流行技术,这可能是一个严重的缺点。
多年来,情况有了很大改善。例如,Spring、Gradle或Maven Surefire曾经存在此问题,但现在不再是问题,因为它们都支持TestNG。所有的IDE都平等对待两种框架。
因此,请确保您计划使用的其他技术与TestNG兼容。这很少成为问题,但最好提前确认。

1

对我来说,最大的问题是与Spring的集成。 我不喜欢扩展TestNg类并编写像这样的代码:

@Test
@ContextConfiguration(locations = { "classpath:spring-test-config.xml" })
public class TestSpring extends AbstractTestNGSpringContextTests {

因为通常我有自己的测试类层次结构。这是我停止使用TestNg的主要原因。
我必须同意参数化测试对我非常有吸引力。但是它们可以很容易地被JUnit数据提供程序替换。

https://github.com/TNG/junit-dataprovider/wiki/Getting-started


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接