1

查看截至今天的 JUnit[v 4.11] 和 TestNg[v 6.8.5] 的最新版本,我发现这两个框架没有太大差异。

如果我在我的项目中使用 Spring MVC 并且有多个层并且需要在所有控制器/服务/dao 层进行单元/集成测试,那么什么框架对我真的很有帮助。

我以前在 JUnit 上工作过,但从未使用过 TestNg。有什么建议吗?

4

3 回答 3

4

jUnit 非常适合单元测试,可以很好地完成工作,但是它从来都不是为集成测试而构建的,但在过去一年左右的时间里,它已经面向集成/自动化测试。

TestNG 从一开始就适用于集成/自动化测试,它拥有比 jUnit 更强大的 dataprovider 版本,甚至在 jUnit 拥有 dataprovider 功能之前。它比 jUnit 具有更好的注释支持,并且与 jUnit 不同,TestNG 不需要您的前/后类方法是静态的。它具有更好的多线程/并行执行支持,并具有方法依赖性,以及顺序执行。jUnit 需要或做得不好的所有这些。

TestNG 甚至有更好的报告,请用谷歌搜索 ReportNG 或(我最喜欢的)TestNG-XLST。

如果您只想要简单的单元测试,IMO 使用 jUnit,如果您需要更强大的测试框架来满足您的单元/集成/性能/自动化测试,那么我非常推荐 TestNG。

于 2013-06-10T12:59:58.107 回答
2

虽然您几乎可以在 TestNG 中做 JUnit 可以做的所有事情,但在 JUnit 环境中拥有 TestNG 的功能需要做更多的工作。

在某种程度上,集成测试所需的一项重要功能是能够对您运行的测试进行排序,这既是为了提前纾困(当数据库测试失败时测试应用程序功能没有意义),也是为了提高效率(进行供应)测试在操作测试之前运行)。虽然某些类型的单元测试(叶子测试)应该无顺序地指定,但几乎所有有趣的东西都是在非叶子方法中完成的,并具有非平凡的设置。

另一个领域是参数化测试:TestNG 对参数化的处理能力更强。

我无法展示 JUnit 相对于 TestNG 的好处,因为测试排序的好处远远超过无法排序测试。

于 2013-06-09T13:04:46.750 回答
-2

差别不是很大

使用您熟悉和熟悉的那个。

一点澄清:

使用 Junit 4.xx,您几乎可以轻松完成 TestNG 所做的任何事情(并且您还可以轻松扩展它)

  1. 设置测试顺序:@FixMethodOrder(MethodSorters.NAME_ASCENDING)
  2. 测试数据使用参数:@RunWith(Parameterized.class)

或者

@Rule public DataSetRule rule = new DataSetRule();

于 2013-06-09T10:31:14.200 回答