博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《JUnit实战(第2版)》—第2章2.1节探索JUnit核心
阅读量:6864 次
发布时间:2019-06-26

本文共 2204 字,大约阅读时间需要 7 分钟。

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

第2章 探索JUnit的核心

JUnit实战(第2版)
Mistakes are the portals of discovery.

错误是发现之门。

—James Joyce

本章重点

使用核心JUnit类

理解JUnit的机制
理解JUnit的生命周期
在第1章中,我们已经明确了我们需要一种可靠的、可复用的方法来测试我们的程序。我们的解决方案就是编写或复用一个框架来驱动测试代码,以测试程序的API。因为我们的程序对现有的类增加了新的类、新的方法,所以我们也需要增加相应的测试代码。经验告诉我们,有时候类会以意想不到的方式相互作用,所以我们很有必要确保我们能够在任何时间运行所有的测试,无论代码发生了什么修改。现在的问题是,我们如何才能运行多个测试类?并且我们如何才能搞清楚哪些测试通过了,而哪些测试失败了?

在这一章中,我们将深入讨论JUnit是如何提供各种功能来解决以上这些问题的。我们首先介绍了JUnit的核心概念—测试类、测试集和测试运行器(test runner),然后我们进一步介绍了各种核心测试运行器和测试集,随后再来看一下我们的老朋友测试类,最后我们将观察这些核心类是如何共同工作的。

而在下一章中,我们将使用一个应用程序示例来展示如何使用这些JUnit的核心概念。而且,我们还阐述了编写和组织测试代码的最佳做法。

2.1 探索JUnit核心

JUnit实战(第2版)
第1章中的CalculatorTest程序,如代码2.1所示,定义了一个测试类,它包含了一个单独的测试方法testAdd。

定义一个测试类的要求是,这个类必须是公共的并且包含了一个无参数的构造函数。在我们的示例中,因为我们没有定义任何其他构造函数,所以我们也不需要定义无参数的构造函数;Java会为我们隐式地创建它。

创建一个测试方法的要求是,这个方法必须使用@Test注释,是公共的,不带任何参数,并且返回void类型。

e34114504acb1663de28a6ce829b932a2bfdf3a7
JUnit在调用(执行)每个@Test方法之前,为测试类创建一个新的实例。这有助于提供测试方法之间的独立性,并且避免在测试代码中产生意外的副作用。因为每个测试方法都运行于一个新的测试类实例上,所以我们就不能在测试方法之间重用各个实例变量值。

为了进行测试验证,我们使用了由JUnit的Assert类提供的assert方法。正如你在之前的示例中所看到的那样,我们在测试类中静态地导入这些方法。另外,根据我们对静态导入的喜好,我们还可以导入JUnit的Assert类本身。表2.1列出了一些最流行的assert方法。

8734a7a7e4b164fa728b8fd62761048524905e9e
当你需要一次运行多个测试类时,你就要创建另一个叫做测试集(test suite或Suite)的对象。你的测试集也是一个特定的测试运行器(或者Runner),因此可以像运行测试类那样运行它。一旦你理解了测试类、Suite与Runner是如何工作的,你就可以编写你所需要的任何测试了。这3个对象形成了JUnit框架的核心。

在日常工作中,你只需要编写测试类与测试集,其他类会在幕后帮你完成测试。

DEFINITION 测试类

(Test class或TestCase或test case)—一个包含一个或者多个测试的类,而这些测试就是指那些用@Test注释的方法。使用一个测试类,可以把具有公共行为的测试归入一组。在本书的后续部分中,如果我们提到测试的时候,我们指的是一个用@Test注释的方法;如果我们提到一个测试用例(或测试类),我们指的是一个包含了这些测试方法的类,也就是一组测试。通常在生产类和测试类之间都存在着一对一的对应关系。

测试集(Suite或者test suite)—一组测试。测试集是一种把多个相关测试归入一组的便捷方式。比如,如果你没有为测试类定义一个测试集,那么JUnit会自动提供一个测试集,包含测试类中所有的测试(在后面的章节中会详细介绍)。一个测试集通常会将同一个包中的测试类归入一个组。

测试运行器(Runner或test runner)—执行测试集的程序。JUnit提供了多种运行器来执行你的测试。本章随后会介绍这些运行器,并且教你如何编写自己的测试运行器。

让我们来看一看JUnit核心对象的具体职责,如表2.2所示。

表2.2 JUnit核心对象

83f90b706cf3262a888790da642b53b6ec77dc75
接下来,我们要详细说明一下表2.2中列出的但我们此前还没有见到过的对象:测试运行器Runner与测试集Suite对象。

要运行一个基础的测试类,你不需要做什么特别的工作;JUnit会代替你使用一个测试运行器(test runner)来管理你的测试类的生命周期,包括创建类、调用测试以及搜集结果。后面的章节将会涉及一些情况,要求你创建的测试能以一种特殊的方式运行。其中的一种情况可以缓解创建测试时经常碰到的一个问题:调用输入不同的测试。在介绍JUnit提供的其他测试运行器之前,我们先在下一节中通过实例来讨论这个特殊情况。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

你可能感兴趣的文章
js脚本 处理js注入
查看>>
A potentially dangerous Request.Form value was detected from the client
查看>>
测试过程之过分关注功能性测试
查看>>
SQL Server -- LIKE模糊查询
查看>>
centos7.0 docker安装部署
查看>>
ORA-32004错误的解决方法
查看>>
嵌入式系统学习步骤
查看>>
PPT | Docker定义存储-让应用无痛运行
查看>>
django 自定义日志配置
查看>>
是程序员,就用python导出pdf
查看>>
Absolute Uninstaller是类似于标准的Windows添加/删除卸载工具
查看>>
C++ Primer Plus(十)——对象和类
查看>>
ZooKeeper伪分布式集群安装及使用
查看>>
js 页面跳转保存状态
查看>>
轻松应对IDC机房带宽突然暴涨问题
查看>>
Mybatis Interceptor 讲解
查看>>
java mybatis向mysql数据库插入中文出现乱码
查看>>
linux用户和文件目录管理
查看>>
表空间数据结构研究_01
查看>>
mysql 编译安装
查看>>