天天看点

《JUnit实战(第2版)》—— 2.1 探索JUnit核心

本节书摘来异步社区《junit实战(第2版)》一书中的第2章,第2.1节,作者:【美】petar tahchiev , felipe leme , vincent massol , gary gregory,更多章节内容可以访问云栖社区“异步社区”公众号查看。

junit实战(第2版)

第1章中的calculatortest程序,如代码2.1所示,定义了一个测试类,它包含了一个单独的测试方法testadd。

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

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

代码2.1 calculatortest测试用例

《JUnit实战(第2版)》—— 2.1 探索JUnit核心

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

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

表2.1 junit断言方法示例

《JUnit实战(第2版)》—— 2.1 探索JUnit核心

当你需要一次运行多个测试类时,你就要创建另一个叫做测试集(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核心对象

《JUnit实战(第2版)》—— 2.1 探索JUnit核心

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

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