JUnit 4中和TestNG用于可比较的。 什么是两个测试框架的利弊?
Answer 1:
我今天TestNG的和JUnit4比较,而我可以用我的测试中,框架的经验有限指出的主要优点是TestNG的具有处理与数据提供商的概念参数化的测试一个更优雅的方式。
至于我可以告诉JUnit4你必须创建一个单独的测试类每组你想测试参数(跑了@RunWith(Parameterized.class)
使用TestNG你可以在一个单一的测试类中的多个数据提供者,这样你就可以将所有的测试单个类在一个测试类为好。
到目前为止,这是我可以指出的TestNG的超过JUnit4好处的嘛。
IntelliJ IDEA的包括TestNG的和JUnit支持开箱即用。 然而,Eclipse的只支持JUnit的开箱即用,需要安装,使其工作一个TestNG插件。
但是,我使用TestNG遇到了一个更恼人的问题是,你的测试类需要扩展PowerMockTestCase
如果您正在使用PowerMock嘲笑依赖于你的测试。 显然,有一些方法可以配置对象,工厂测试框架需要知道通过一个特殊的方法使用PowerMock时,或通过有关testng.xml
套房的定义,但这些似乎在瞬间被打破。 我不喜欢有测试类扩展的测试框架类,它似乎的hackish。
如果你不使用PowerMock这当然不是一个问题,但所有的一切我得到的印象是JUnit4是更好的支持。
Answer 2:
根据我与这两个框架方面的经验,TestNG的有JUnit的团队已经拒绝执行了好几年了几个方便的特点。 我更喜欢JUnit的这个原因。 转换成TestNG的是容易的,因为它基本上支持JUnit中几乎一切(有一个转换器Eclipse插件偶数),转换回JUnit是因为这些缺失的功能没有那么大。
在TestNG的
@BeforeClass
方法不是静态的,执行该类中的运行测试之前,而不是当测试类被加载(JUnit的行为)。 我曾经有过,所有的数据库测试(几十个)的初始化在启动数据库的权利,这是很愚蠢的行为JUnit的项目。 有很多支持和反对这JUnit的社会争论。 它的要点是,每个测试方法应该有自己的测试夹具,因此,你不应该有一个beforeAll风格的方法就是非静态的,因为这将让你悄悄设置一个实例变量一次,然后在所有的测试中使用它。 有效的,但真烦集成测试。 TestNG的在这里为用户提供了选择。 Junit的不按照设计,这是烦人。TestNG的数据提供者有一点比JUnit的等价更加灵活。 您可以为每个测试,数据提供方法,应改为提供具有一种尺寸的输入能够为整个类的所有方法,因为JUnit中注明。 所以,你可以有正面和负面的情况下,数据提供者在一个类你的测试。 非常不错的。
您可以标记了一个类
@Test
TestNG中,这意味着:每一个公共方法是一个测试。 JUnit中,你需要复制/粘贴@Test
上的每一个方法。
既与烦恼是hamcrest是捆绑在一起的JUnit和JUnit的方式捆绑使用TestNG的方式。 有Maven中alterate罐子没有这个问题。
我最大的担心有两个框架是,他们似乎都已经停止进化。 发布越来越不那么频繁,而且往往有越来越少值得注意的特点。 整个BDD运动似乎已经对例如或者框架的影响很小。 此外,JUnit的可以简单地都采用了最什么,我上面列出。 没有良好的技术理由的JUnit不能执行任何这些东西; 背后的JUnit的人只是选择不执行这些东西。 这两个项目似乎缺乏对未来发展方向的远景,以及他们似乎很乐意做的只是小的调整,在过去的几年里。
Answer 3:
我一直在寻找一个很好的理由在JUnit的切换TestNG的,我发现这个幻灯片通过托梅克Kaczanowski解决这个问题非常好。 托梅克是笔者实际单元测试这似乎是由开发人员和测试人员的尊重非常多的书。
Answer 4:
如果你基于Java / Scala的项目工作,摇篮是注意选择,熊您的构建工具ScalaTest
框架只有JUnitRunner
运行您的斯卡拉测试。 换句话说,你有一个选择:
- +斯卡拉测试与JUnitRunner =>更好的摇篮一体化运行Java JUnit测试
- 爪哇TestNG进行+ Scala的测试使用Scala转轮=>普尔摇篮集成运行,因为阶测试运行是从摇篮的观点单个散装任务。
Answer 5:
您可以使用如的Mockito你嘲笑的框架。 它使用TestNG很好地集成。 您不必扩展任何类使用同的Mockito TestNG的。 你测试的代码少加上这样的,如果因任何原因,你需要使用其他嘲讽框架可以很容易地做到这一点。
Answer 6:
简而言之..
如果你的范围仅限于罚款详细的单元测试,在它们之间没有依赖关系,可以使用JUnit的然后。
如果你的范围需要测试之间可能/可能不需要依赖和数据(参数)共享功能性测试然后选择TestNG的。 此外,TestNG的可以做一些类似的JUnit单元测试。 这样你就可以拥有一套单元测试和一系列的功能测试。