《JUnit实战(第2版)》—— 1.1 证实它能运行-阿里云开发者社区

开发者社区> 开发与运维> 正文

《JUnit实战(第2版)》—— 1.1 证实它能运行

简介:

本节书摘来异步社区《JUnit实战(第2版)》一书中的第1章,第1.1节,作者:【美】Petar Tahchiev , Felipe Leme , Vincent Massol , Gary Gregory,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.1 证实它能运行

JUnit实战(第2版)
一些开发人员认为自动测试是开发过程中非常重要的一部分。你无法证实一个组件能够运行,除非它通过了一系列全面的测试。有两名开发人员觉得这类单元测试如此重要,以至于值得为它编写一个框架。1997年,Erich Gamma和Kent Beck针对Java创建了一个简单但有效的单元测试框架,叫做JUnit。他们的工作遵循了SUnit的设计,而SUnit是Kent Beck早期为Smalltalk创建的一个框架。

NITION 框架*

个应用程序的半成品{![Ralph E. Johnson and Brian Foote, “Designing Reusable Classes,” Journal of Object-Oriented Programming __1.5 (June/July 1988): 22–35;]}。框架提供了一个可复用的公共结构,可以在多个应用程序之间进行共享。开发人员将框架融入到他们自己的应用程序中,并且加以扩展以满足他们特定的需求。框架与工具包的不同之处在于,框架提供了一致的结构,而不只是一组简单的工具类。
如果你对这些名字似曾相识,那很正常。Erich Gamma就是为我们带来经典之作《模式设计》1的四大作者之一。同样,Kent Beck由于他在软件开发方面的开创性成就“极限编程”而广为人知。

JUnit是SourceForge网站上的一款开源软件,根据IBM通用公共许可证(Common Public License)1.0版本进行发布。通用公共许可证 对商业用户是友好的:人们可以随同商业产品分发JUnit,而没有很多繁琐的手续和限制。

JUnit迅速成为Java中开发单元测试的事实上的标准框架。被称为xUnit的相关测试框架,正在逐渐成为任何语言的标准框架。ASP、C++、C#、Eiffel、Delphi、Perl、PHP、Python、REBOL、Smalltalk和Visual Basic都有了对应的xUnit框架,这里只是列举了一些而已。

JUnit团队并没有发明软件测试,甚至也没有发明单元测试。起初,单元测试这个术语只是用来描述一项检查单个工作单元的行为的测试。

随着时间的推移,单元测试这一术语的运用领域扩展了。例如,IEEE已经将单元测试定义为“单个硬件、软件单元或一组相关单元的测试”2。

在本书中,单元测试只是指窄义上的一种测试:检查与其他单元隔离的单个单元。我们重点关注的是程序员应用在他们自己代码中的小型渐增测试。有时我们把这种测试称为Programmer Test,以区别于品质保证测试(QA)和客户测试。

以我们的角度来看,一个典型的单元测试通常可以描述为:“确保方法接受预期范围内的输入,并且为每一次测试输入返回预期的值”。

以上描述要求我们通过方法的接口来测试方法的行为。如果我们将x值传给方法,那么它会返回y值吗?如果我们改为将z值传给方法,那么它会正确地抛出异常吗?

DEFINITION

单元测试检查一个独立工作单元的行为。在Java应用程序中,独立工作单元经常是(但不总是)一个独立方法。相比之下,集成测试和验收测试检查的是各种组件如何交互。一个工作单元就是一项任务,不直接依赖于其他任何任务的完成。
单元测试通常关注的是一个方法是否遵循了它的API契约中的条款。就像人们在特定条件下同意交换某种商品或服务时所签署的书面合同,API契约是一份由方法签名而生成的正式协议,方法需要它的调用者提供特定的对象引用(Object Reference)或原始类型数值(Primitive Value),然后返回一个对象引用或原始类型数值。如果方法不能遵守契约,测试将抛出异常,于是我们就说方法已经破坏了它的契约。

在这一章里,我们从零开始介绍如何为一个简单的类创建单元测试。我们首先编写一个测试以及运行该测试的最小框架,以便你能够理解我们是如何处理的。然后我们再通过JUnit向你展示,正确的工具可以如何使生活变得更加简单。

DEFINITION

API契约是一种观点:把一个应用程序编程接口(API)当作是在调用者与被调用者之间的正式协议。通常,单元测试通过证明预期的行为来帮助定义API契约。API契约的概念源于因Eiffel编程语言而流行的“Design by Contract”的实践。
1Erich Gamma et al., Design Patterns(Reading, MA: Addison-Wesley, 1995).
2EEE Standard Computer Dictionary: A Compilation of IEEE Standard Computer Glossaries (New York, IEEE, 1990).
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

版权声明:本文首发在云栖社区,遵循云栖社区版权声明:本文内容由互联网用户自发贡献,版权归用户作者所有,云栖社区不为本文内容承担相关法律责任。云栖社区已升级为阿里云开发者社区。如果您发现本文中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,阿里云开发者社区将协助删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章