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

简介:

本节书摘来自异步社区《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提供的其他测试运行器之前,我们先在下一节中通过实例来讨论这个特殊情况。

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

相关文章
|
Java 测试技术 Spring
Gradle从0入门到实战系列【八】SpringBoot集成Junit单元测试
JUnit 是一个 Java 编程语言的单元测试框架。JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个统称为 xUnit 的单元测试框架之一。
1625 1
Gradle从0入门到实战系列【八】SpringBoot集成Junit单元测试
|
3月前
|
XML Java 测试技术
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
|
6月前
|
Java Maven
Maven实战 Item4 -- Maven核心概念_maven junit version(1)
Maven实战 Item4 -- Maven核心概念_maven junit version(1)
|
Java 测试技术 程序员
|
Java 测试技术 API
SpringBoot 实战:JUnit5+MockMvc+Mockito 做好单元测试
今天聊聊如何在 SpringBoot 中集成 Junit5、MockMvc、Mocktio。Junit5 是在 Java 栈中应用最广的测试框架,Junit4 一度霸榜。
1266 0
SpringBoot 实战:JUnit5+MockMvc+Mockito 做好单元测试