Mik*_*one 66
我已经使用了两者,但我不得不同意Justin Standard,你不应该考虑将现有测试重写为任何新格式.无论做出何种决定,都可以轻而易举地完成这两项任务.TestNG比JUnit更加可配置,但最终它们同样运行良好.
TestNG具有一个简洁的功能,您可以将测试标记为特定组,然后轻松运行特定组的所有测试,或排除特定组的测试.因此,您可以标记在"慢"组中运行缓慢的测试,然后在需要快速结果时忽略它们.他们的文档中的一个建议是将一些子集标记为"checkin"测试,每当你检查新文件时都应该运行.我从来没有在JUnit中看到过这样的功能,但是如果你没有它,你再也不会看到真的很想念它.
对于高配置的所有声明,几周前我碰到了一个角落的情况,我不能做我想做的事情...我希望我能记住它是什么,但我想提起它所以你知道它并不完美.
TestNG的最大优势是注释......无论如何,JUnit在版本4中添加了注释.
aby*_*byx 19
大约一年前,我们遇到了同样的问题.我花了一些时间考虑哪一步更好,最终我们意识到TestNG没有'杀手级功能'.这很好,并且具有JUnit 4没有的一些功能,但我们不需要它们.
我们不希望人们在了解TestNG时感到不舒服,因为我们希望他们继续编写大量测试.
此外,JUnit几乎是Java世界中事实上的标准.没有合适的工具不支持它,你可以在网上找到很多帮助,他们在过去一年中添加了许多新功能,这表明它还活着.
我们决定坚持使用JUnit,从不回头.
Mar*_*utt 17
TestNG对我来说最大的抽奖卡包括其支持测试组,更重要的是 - 测试组依赖性(将测试标记为依赖于组导致测试在依赖组失败时简单地跳过运行).
TestNG的其他大抽奖卡包括测试参数,数据提供商,注释变换器,以及最重要的 - 充满活力和响应迅速的用户社区.
虽然从表面上看,可能并不认为上面的所有TestNG功能都不需要,一旦你开始了解测试的灵活性,你就会想知道你是如何应对JUnit的.
(免责声明 - 我根本没有使用过JUnit 4.x,因此我无法真正评论其中的进展或新功能).
mez*_*zmo 15
干杯以上所有.我个人发现我在TestNG中更喜欢的其他一些东西是:
在@BeforeClass创建类之后TestNG的发生,这样你就不会只能够打电话给你的类的静态方法,它的约束.
并行和参数化测试,也许我只是没有足够的生命...但我只是写了一组Selenium测试,接受驱动程序名称作为参数.然后定义3个并行测试组,每个为IE,FF和Chrome驱动程序1,并观看比赛!我最初做了4次,但是HtmlUnit由于这个或那个原因,我工作过的页面太多了.
是的,可能需要找到生命.;)
rav*_*kam 10
我想分享我今天遇到的那个.我发现内置的参数化跑步者在Junit4中与TestNG比较粗糙(我知道每个框架都有其优势但仍然如此).Junit4注释@parameters仅限于一组参数.我在测试同一测试类中的功能的有效和无效行为时遇到此问题.因此,将使用它找到的第一个公共静态注释方法,但它可以按任何顺序找到它们.这导致我们不必要地编写不同的类.但是,TestNG提供了为每种方法提供不同类型的数据提供者的简洁方法.因此,我们可以在同一测试类中以有效和无效的方式测试相同的代码单元,分别放置有效/无效数据.我会选择TestNG.
TestNG的另一个优点是支持并行测试.在我们的多核时代,我认为这很重要.
我也使用了两个框架.但我使用hamcrest进行断言.Hamcrest允许您轻松编写自己的断言方法.而不是
assertEquals(operation.getStatus(), Operation.Status.Active);
Run Code Online (Sandbox Code Playgroud)
你可以写
assertThat(operation, isActive());
Run Code Online (Sandbox Code Playgroud)
这使您有机会在测试中使用更高级别的抽象.这使您的测试更加强大.
@BeforeClass和@AfterClass方法的声明在 JUnit 中必须是静态的,而 TestNG 在方法声明中具有更大的灵活性,它没有这些约束。
在 TestNG 中,我们可以使用 2 种方式参数化测试。@Parameter 或 @DataProvider 注释。
i) @Parameter用于简单情况,需要键值映射。(数据通过 xml 文件提供)
ii) @DataProvider用于复杂情况。使用二维数组,它可以提供数据。
在TestNG中,由于@DataProvider方法不需要是静态的,我们可以在同一个测试类中使用多个数据提供者方法。
依赖测试:在 TestNG 中,如果初始测试失败,则将跳过所有后续的依赖测试,不会标记为失败。但 JUnit 将其标记为失败。
分组:单个测试可以属于多个组,然后在不同的上下文中运行(如慢速或快速测试)。JUnit 类别中存在类似的功能,但缺少 @BeforeGroups / @AfterGroups TestNG 注释,允许初始化测试/拆除它。
并行性:如果您想在多个线程上并行运行相同的测试,TestNG 为您提供了一个简单易用的注释,而 JUnit 没有提供开箱即用的简单方法。
TestNG @DataProvider 还可以支持 XML 来输入数据、CSV 甚至纯文本文件。
TestNG 允许您声明测试之间的依赖关系,如果依赖关系测试未通过则跳过它们。
@Test(dependsOnMethods = { "dependOnSomething" })
JUnit 中不存在此功能
默认情况下,TestNG 报告生成到一个测试输出文件夹,其中包含 HTML 报告,其中包含所有测试数据、通过/失败/跳过、它们运行了多长时间、使用了哪些输入以及完整的测试日志。此外,它还可以将所有内容导出到一个 XML 文件中,该文件可用于构建您自己的报告模板。
在 JUnit 方面,所有这些数据也可以通过 XML 获得,但没有现成的报告,您需要依赖插件。
本教程并排给出了一个很好的区别:TestNG 与 JUnit:有什么区别?
| 归档时间: |
|
| 查看次数: |
36596 次 |
| 最近记录: |