【问题标题】:JUnit vs TestNg - For a New Project that using Spring MVCJUnit vs TestNg - 对于使用 Spring MVC 的新项目
【发布时间】:2013-06-07 15:59:10
【问题描述】:
查看 JUnit[v 4.11] 和 TestNg[v 6.8.5] 的最新版本,我发现这两个框架没有太大差异。
如果我在我的项目中使用 Spring MVC 并且有多个层并且需要在所有控制器/服务/dao 层进行单元/集成测试,那么哪个框架对我真正有帮助。
我之前有过使用 JUnit 的经验,但从未使用过 TestNg。有什么建议吗?
【问题讨论】:
标签:
unit-testing
integration-testing
testng
junit4
【解决方案1】:
jUnit 非常适合单元测试,可以很好地完成工作,但它从来不是为集成测试而构建的,但在过去一年左右的时间里,它已经面向集成/自动化测试。
TestNG 从一开始就适用于集成/自动化测试,它拥有比 jUnit 更强大的 dataprovider 版本,甚至在 jUnit 拥有 dataprovider 功能之前。它比 jUnit 具有更好的注释支持,并且与 jUnit 不同,TestNG 不需要您的前/后类方法是静态的。它具有更好的多线程/并行执行支持,并具有方法依赖性,以及顺序执行。 jUnit 需要或做得不好的所有这些。
TestNG 甚至有更好的报告,请用 Google 搜索 ReportNG 或(我最喜欢的)TestNG-XLST。
如果你只想要简单的单元测试,IMO 可以选择 jUnit,如果你需要更健壮的测试框架来满足你的单元/集成/性能/自动化测试,那么我非常推荐 TestNG。
【解决方案2】:
虽然您几乎可以在 TestNG 中完成 JUnit 可以做的所有事情,但在 JUnit 环境中拥有 TestNG 的功能需要做更多的工作。
在某种程度上,集成测试所需的一个重要功能是能够对您运行的测试进行排序,这既是为了提前纾困(当数据库测试失败时测试应用程序功能没有意义),也是为了提高效率(在操作测试之前运行配置测试)。虽然某些类别的单元测试(叶子测试)应该不按顺序指定,但几乎所有有趣的东西都是在非叶子方法中完成的,并具有非平凡的设置。
另一个领域是参数化测试:TestNG 对参数化的处理能力更强。
我无法展示 JUnit 优于 TestNG 的好处,因为测试排序的好处远远超过无法排序测试。
【解决方案3】:
差别不大,
使用你熟悉和熟悉的那个。
一点说明:
使用 Junit 4.xx,您几乎可以轻松完成 TestNG 所做的任何事情(您还可以轻松扩展它)
- 设置测试顺序:@FixMethodOrder(MethodSorters.NAME_ASCENDING)
- 对测试数据使用参数:@RunWith(Parameterized.class)
或
@规则
public DataSetRule rule = new DataSetRule();