第 3 章 模拟和断言框架

在上一章中,我们探讨了在 Go 中编写测试的基本知识。我们讲解了包的概念、如何将测试文件与源代码组织在一起,以及如何使用 Go 的 testing 包编写测试和基准测试。

我们通过使用计算器案例中的代码示例,展示了在 Go 中编写测试的概念和基本原则。到目前为止,我们所探讨的简单示例并未涉及任何外部依赖,这使得测试的设置和验证变得更加复杂。

在本章中,我们将开始研究如何将单元测试对象与其依赖项隔离,从而保持测试和断言尽可能简单和快速。在 Go 中实现这一点最简单的方法是利用接口的强大功能。

我们将通过引入依赖关系扩展计算器示例,并学习如何为这些依赖生成模拟(mock),从而能够控制它们的行为。

接着,我们将探讨一些 Go 工程师常用的外部开源断言库。到目前为止,我们已经自己编写了一些简单的断言,这可能会变得重复且有限。testifyginkgo 是两个流行的断言库,可以用来补充 Go 的 testing 包。

最后,我们将不再专注于测试代码和机制,而是转向编写可测试代码的设计技巧,回顾面向对象设计的 SOLID 原则。我们将了解这些原则是什么,以及如何在编写代码时应用它们。

本章将涵盖以下内容:

  • 使用接口包装依赖项

  • 如何生成和使用模拟来隔离测试代码

  • 使用流行的断言框架

  • SOLID 设计原则是什么

  • 编写可测试代码的最佳实践

技术要求

您需要安装 Go 版本 1.19 或更高版本,以便运行本章中的代码示例。安装过程可以在 Go 的官方文档中找到,网址是 https://go.dev/doc/install

本书中的代码示例可以在 GitHub 上公开获取,网址是 https://github.com/PacktPublishing/Test-Driven-Development-in-Go/chapter03