现在学习Java应该选择哪个单元测试框架?

12

虽然我已经用Java编程大约三年了(不是每天都在写,但至少我理解了基础知识),但还没有真正接触过单元测试领域...

现在我的工作更多是测试/问题分析为导向,因此我认为一个好的Java单元测试框架将对这个角色非常有帮助。

显然,在我们团队中没有哪个框架是必须使用的。因此,我想知道,作为初学者,哪个框架是快速入门的好选择?

Junit?

TestNG?

还是其他东西?

编辑:目前看来,JUnit在Amazon上与TestNG相比拥有更多的印刷书籍作为参考。但我不知道它们在Java行业中的流行程度/趋势。


3
我们有一本关于TestNg的“下一代测试”书籍,非常不错。 - Rakesh Goyal
12个回答

33

我是TestNG的创始人和《下一代测试》一书的作者,以下是一些(显然有偏见的)想法。

对于功能测试(或端到端/集成/系统测试,无论您喜欢哪个术语),TestNG提供了一些JUnit没有的功能,用户发现这些功能非常有用:

  • 分组。一旦编译了测试,您可以要求TestNG运行所有“前端”测试,或者“快速”,“慢速”,“数据库”等…

  • 支持多线程测试。这有两个不同的含义:

1)您可以告诉TestNG在您定义的线程池中并发地运行所有测试(在XML文件中进行一行更改)。这是非常可配置的,以便非多线程的测试仍然可以在单个线程中运行。

2)您可以告诉TestNG从p个线程中n次调用您的测试方法。这可以让您很好地了解您正在测试的代码的线程安全性。

  • 测试依赖关系和确定性排序。这对于集成测试非常有用,在那里看到需要先成功执行先前的测试方法才能运行的测试方法非常普遍。出于此特定原因,TestNG在Selenium社区非常受欢迎(“如果登录测试失败,请不要费心测试我的网站的此页面”)。

测试依赖关系的另一个直接优势是,TestNG可以告诉您“1个方法失败,99个方法跳过”,这比“100个方法失败”更准确。

TestNG有许多其他功能,我很乐意在此回答问题或在我们的邮件列表(http://groups.google.com/group/testng-users)上回答问题。


1
在过去的几年中,你让我的生活变得更加轻松。 :) 你没有提到数据提供者,它们可以鼓励和促进使用不同值运行相同的测试。 - Andy Thomas
虽然我来晚了,但我也想说TestNG文档对于“初学者”来说通常更好。 - kwenholz

6

我建议使用Unitils学习TestNG。它一直能够满足我所有的需求。再加上XMLUnit和DBUnit,你就可以长期使用了。


我看了一下这个页面。看起来很不错。 - Robert Harvey
2
+1 提到 Unitils。这是一个我之前不知道的有趣项目。 - Dominik Sandjaja

4

说实话,在我工作和生活的地方,JUnit比TestNG更受欢迎。我知道这可能是一个奇怪的论点,但如果我是你,我会浏览一些招聘广告,看看你所在地区/国家的行业更青睐哪个测试框架(例如,我选择JUnit,因为所有雇主都要求掌握JUnit,即使我学习了TestNG,它可能更好,但对我有什么好处呢?)。


2

哦,澳洲这么大的差距...我从来不知道 :) - Michael Mao

2

两者都能很好地完成它们的工作,所以没有对错之分。您可以与许多框架结合使用,以帮助支持您的开发。

如果您需要为客户工作,可以学习您预期要使用的那个。如果不是,最好的想法是尝试两者并找出哪个对您最有效。


2
我曾经使用过两种测试框架,发现在单元测试方面jUnit非常好用,但在系统测试方面我会推荐TestNG。TestNG提供了一些额外的功能(如参数化测试),并且非常灵活。例如,在jUnit中,套件中有一个测试失败通常意味着您必须重新运行整个套件,但在TestNG中,您只需重新运行失败的测试即可。这是一篇非常好的文章,概述了两者的优缺点(虽然有一点偏向TestNG)。 http://www.ibm.com/developerworks/java/library/j-cq08296/index.html

1
你所说的在jUnit中同样适用。 - Jean-Philippe Caruana
我原本认为 jUnit 不支持对象的参数化测试。 - Dimitar

2

JUnit在许多IDE(包括Eclipse)中得到了很好的支持,使用带有注释的JUnit 4非常方便。

除非您有特定的需求,否则请选择工具支持,即jUnit。


TestNG也得到了所有主要集成开发环境的支持。 - Dan Dyer
我认为TestNG插件和JUnit插件一样好用。我没有注意到任何问题。 - KevinS

1

TestNG与Unitils真的非常棒。它几乎涵盖了所有要求。Unitils支持许多断言工具、Spring、Hibernate、模拟框架、dbutils等。


1
对我来说,这只是一种口味问题。我个人已经使用jUnit超过5年了,我非常满意它,特别是最新版本和其@Rule功能,可以防止我的团队反复编写相同的代码。 它与我每天使用的所有工具都很好地集成:IDE、构建、持续集成...

1

Junit是著名且最佳的单元测试工具,我认为你和我都知道Junit非常重要,以至于Java开发人员改变了他们的编码模式来使用Junit,你可以学习一些Junit作为基本的单元测试技术,也可以学习TestNG作为第二个单元测试技术。

以下链接可能对你有用! http://www.javarmi.com/2010/08/junit-4-tutorial-and-example-get-starting/


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