Skip to content

Latest commit

 

History

History
78 lines (44 loc) · 6.63 KB

File metadata and controls

78 lines (44 loc) · 6.63 KB

零、序言

人类不是完美的思想家。在撰写本文时,软件工程师是人。他们中的大多数。因此,编写高质量、有用的软件是一项非常困难的任务。正如我们将在本书中发现的,软件测试是软件工程师(即开发人员、程序员或测试人员)为保证给定软件的质量和信心水平而进行的最重要的活动之一。

JUnit 是 Java 语言最常用的测试框架,也是软件工程中最引人注目的框架之一。如今,JUnit 已不仅仅是 Java 的单元测试框架。我们将发现,它可以使用不同的策略(如黑盒或白盒)来实现不同类型的测试(如单元测试、集成测试、端到端测试或验收测试)。

2017 年 9 月 10 日,JUnit 团队发布了 JUnit 5.0.0。这本书主要关注 JUnit 的这个新的主要版本。我们将发现,JUnit 5 已经对 JUnit 框架进行了全面的重新设计,改进了一些重要特性,如模块化(JUnit 5 体系结构是完全模块化的)、可组合性(JUnit 5 的扩展模型允许在 JUnit 5 测试生命周期中集成第三方框架是一种简单的方法)和兼容性(JUnit 5 支持在全新的 JUnit 平台上执行 JUnit 3 和 JUnit 4 遗留测试)。所有这些都遵循基于 Java 8 的现代编程模型,并与 Java 9 兼容。

软件工程涉及一个多学科的知识体系,具有强大的变革动力。本书主要从开源的角度(JUnit 从一开始就是开源的)全面回顾了与软件测试相关的许多不同方面。在本书中,除了 JUnit,您还将学习如何在我们的开发过程中使用第三方框架和技术,即 Spring、Mockito、Selenium、Appium、Cucumber、Docker、Android、REST 服务、Hamcrest、Allure、Jenkins、Travis CI、Codecov 或 SonarCube 等。

这本书涵盖的内容

第 1 章“软件质量回顾及 Java 测试”,对软件质量和测试进行了详细的回顾。本章的目的是以易懂的方式澄清该领域的术语。此外,本章还总结了 JUnit(版本 3 和版本 4)的历史,以及一些 JUnit 增强器(例如,可用于扩展 JUnit 的库)。

第 2 章“JUnit 5 的新增功能”,首先介绍了创建 JUnit 5 版本的动机。然后,本章介绍 JUnit5 体系结构的主要组件,即平台、Jupiter 和 Vintage。接下来,我们将了解如何运行 JUnit 测试,例如,使用不同的构建工具,如 Maven 或 Gradle。最后,本章是 JUnit5 的扩展模型,它允许任何第三方扩展 JUnit5 的核心功能。

第 3 章“JUnit 5 标准测试”详细描述了新 JUnit 5 编程模型的基本特性。这个编程模型和扩展模型一起被称为 Jupiter。在本章中,您将了解基本的测试生命周期、断言、标记和筛选测试、条件测试执行、嵌套和重复测试,以及如何从 JUnit4 迁移。

第 4 章“使用高级 JUnit 特性简化测试”,详细描述 JUnit 5 特性,如依赖注入、动态测试、测试接口、测试模板、参数化测试、与 Java 9 的兼容性,以及 JUnit 5.1 的计划特性(撰写本文时尚未发布)。

第 5 章“JUnit 5 与外部框架的集成”,讲述 JUnit 5 与现有第三方软件的集成。这种集成可以用不同的方式完成。通常,应该使用 Jupiter 扩展模型与外部框架交互。Mockito(一种流行的模拟框架)、Spring(一种旨在基于依赖注入创建企业应用程序的 Java 框架)、Docker(一种容器平台技术)或 Selenium(Web 应用程序测试框架)就是这样的例子。此外,开发人员可以重用 Jupiter 测试生命周期来与其他技术交互,例如 Android 或 REST 服务。

第 6 章“从需求到测试用例”提供了一套最佳实践,旨在帮助软件测试人员编写有意义的测试用例。考虑到需求是软件测试的基础,本章为避免典型错误(反模式和代码气味)的编码测试提供了全面的指南。

第 7 章“测试管理”是本书的最后一章,其目的是引导读者了解在一个活的软件项目中如何管理软件测试活动。为此,本章回顾了持续集成CI)、构建服务器(Jenkins、Travis)、测试报告或缺陷跟踪系统等概念。作为本书的总结,本文介绍了一个完整的示例应用程序以及不同类型的测试(单元测试、集成测试和端到端测试)。

这本书你需要什么

为了更好地理解本书中介绍的概念,强烈建议使用 GitHub 存储库,其中包含本书中介绍的代码示例。在作者看来,触摸和玩弄代码对于快速理解 JUnit5 测试框架至关重要。如前所述,本书的最后一章提供了一个完整的应用程序示例,涵盖了本书中一些最重要的主题。此应用程序(称为Rate my cat)也可在 GitHub 的存储库找到。

为了运行这些示例,您需要 JDK 8 或更高版本。您可以从其网站下载 Oracle JDK。此外,强烈建议使用集成开发环境IDE)来简化开发和测试过程。我们将在本书中发现,在撰写本文时,有两个完全符合 JUnit 5 的 IDE,即:

如果希望从命令行运行 JUnit 5,可以使用两种可能的构建工具:

这本书是给谁的

本书面向 Java 软件工程师。出于这个原因,这篇文献试图使用与读者相同的语言(即 Java),因此它是由上述公共开源 GitHub 存储库中可用的工作代码示例驱动的。

习俗

在本书中,您将发现许多文本样式可以区分不同类型的信息。下面是这些风格的一些例子,并解释了它们的含义。文本中的代码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄如下所示:“@AfterAll@BeforeAll方法只执行一次”。

代码块设置如下:

package io.github.bonigarcia;

import static org.junit.jupiter.api.Assertions.assertTrue;

import org.junit.jupiter.api.Test;

class StandardTest {

    @Test
    void verySimpleTest () {
        assertTrue(true);
    }

}

任何命令行输入或输出的编写方式如下:

mvn test

新术语重要词语以粗体显示如下:兼容性是指产品、系统或组件与其他产品交换信息的程度。

警告或重要注释显示在这样的框中。

提示和技巧如下所示。