java单元测试代码-七年级历史·1课3练单元达标测试
Reddit 上最近的一个讨论线程引发了 JUnit 和 Spock 这两个测试框架的支持者之间的争论,从 Jakub Dziworski 的一篇博客文章开始,该文章的主题是“JUnit 有什么问题?” GitHub 存储库引入了基于 JUnit 的单元测试,但难怪 JUnit 已经存在超过 15 年了。 但 Spock 继续蚕食市场。
JUnit 由极限编程的创始人 Kent Beck 和 Design Patterns: Fundamentals of Reusable Object-Oriented Software 的合著者 Erich Gamma 共同创建,并很快成为单元测试、移植和克隆领域的事实标准在几乎所有流行的编程语言中。 然而,多年来 JUnit 的特性一直受到较新的单元测试框架(如 TestNG 和 Spock)的质疑。
测试NG
TestNG 由 New Java Testing Techniques、TestNG 和 Advanced Concepts 的合著者 Cédric Beust 于 2004 年创建。 根据 TestNG 网站的描述java单元测试代码,“TestNG 是一个受 JUnit 和 NUnit 启发的测试框架java单元测试代码,但引入了一些新功能使其更强大且易于使用”。 Beust 在他自己的网站上写道,“出于绝望,我开始编写 TestNG,JUnit 有一些缺陷,我已经在博客上注意到了这些缺陷。”
斯波克
在他的博文中,Dziworski 质疑将第三方模拟框架与 JUnit 相结合的必要性。 “在大中型 Java 项目中结合这些框架可以使读写测试变得更加困难,”他说。 他接着说,“如果测试代码很难写,开发人员往往把写测试代码当成一件痛苦的工作,不想写测试代码。” 开始无视他们。 避免或延迟编写测试代码会使应用不再值得信赖。 最终开发人员会害怕修改这段代码,因为应用程序的其他部分可能会以某种奇怪的方式崩溃。”
在最近的 Java Greek 用户组会议上,“Java 测试框架 Spock”一书的作者 Kostis Kapelonis 发表了一个比较 JUnit 和 Spock 的演讲。
Spock 自 2008 年创建以来。尽管受到 JUnit 的启发,Spock 的特点不仅仅是 JUnit 扩展:
以下代码片段(与 Reddit 讨论中使用的代码片段相同)演示了一些功能的使用:
复制代码
class Math extends Specification { def "maximum of two numbers"(int a, int b, int c) { expect: Math.max(a, b) == c where: a | b | c 1 | 3 | 3 // passes 7 | 4 | 4 // fails 0 | 0 | 0 // passes } }
这个简单的测试示例使用两个预定义块,expect:(第 3 行)和 where:(第 5 行)。 where:块用于定义数据表,用于映射第四行定义的Math.max函数的预期输入和输出。 第二行演示如何为测试用例自定义名称。
可以在 GitHub 上查看包含 JUnit 和 Spock 代码示例的完整项目。
回到 2008 年,InfoQ 报道了一些关于 JUnit 消亡的猜测。 八年后,JUnit 5 项目仍然存在并且运行良好,里程碑 1 正在开发中。 测试框架的优缺点!
查看英文原文:Test Well and Prosper: The Great Java Unit-Testing Frameworks Debate
感谢张龙审阅本文。
为InfoQ中文网投稿或参与内容翻译,请发邮件至editors@cn.infoq.com。 也欢迎您关注我们的新浪微博(@InfoQ,@宁晓云)和微信(微信ID:InfoQChina)。