前言

通过真实世界的示例编写地道高效的 Go 测试实用指南。

在我作为软件工程师的职业生涯初期,我专注于理解技术概念并尽可能快速地交付功能。随着职业的进展以及我编写代码的能力的成熟,我开始理解代码质量和可维护性的重要性。这对于 Go 开发者来说尤其重要,因为 Go 语言的设计围绕着效率、简洁性和安全性这些核心价值。

本书旨在为你提供提升 Go 代码质量所需的所有工具,采用业界标准的开发方法——测试驱动开发(TDD)。它为你提供了 TDD 原则和实践的全面介绍,帮助你在没有任何先前知识的情况下入门。它还演示了如何将这种方法应用于 GoGo 作为开发语言继续获得越来越多的关注和使用。

在本书中,我们将探索如何利用 TDD 的好处,书中包含了多种代码示例,包括构建一个示范的 REST API。这种实践方法将教你如何设计可测试的代码并编写高效的 Go 测试,使用标准的测试库以及 Go 开发生态系统中流行的开源第三方库。

本书介绍了 TDD 的实践,并通过实际示例教你如何在 Go 应用程序的开发中使用它们。它演示了如何在应用程序的各个层面上利用 TDD 的优势,确保它们能够交付功能性和非功能性的需求。同时,书中还涉及了如何设计和实现可测试代码的重要原则,如容器化、数据库集成和微服务架构。

我希望这本书能在你成为更好工程师的旅程中有所帮助。在这本书的页面里,我包含了我在刚开始从事 Go 开发时希望自己知道的所有知识,旨在帮助你更容易地编写经过良好测试的代码。

本书适合谁阅读

本书面向那些希望交付高质量和经过良好测试的 Go 项目的开发人员和软件测试专业人员。如果你刚刚开始接触 TDD,你将学习如何在开发过程中采用其实践。如果你已有一定经验,书中的代码示例将帮助你编写更高效的测试套件,并教你新的测试实践。

本书内容

  • 第 1 章《掌握测试驱动开发》 介绍了 TDD 的原则和好处,为继续学习它提供了动机。

  • 第 2 章《单元测试基础》 教会我们编写测试的基本知识。它涵盖了测试金字塔以及如何使用 Go 的标准测试库编写单元测试,并运行我们项目中的测试。

  • 第 3 章《Mocking 和断言框架》 在前几章的知识基础上,教我们如何编写有依赖关系的代码测试。它涉及接口的使用、如何编写更好的断言,以及生成和使用 Mock 来编写具有隔离范围的测试。

  • 第 4 章《构建高效的测试套件》 探讨了如何使用流行的 Go 测试技术——表驱动设计,将测试组织成测试套件(涵盖各种场景)。

  • 第 5 章《执行集成测试》*将我们编写的测试范围扩展到包括组件之间的交互,介绍了集成测试。它还介绍了行为驱动开发(*BDD),这是一种 TDD 的扩展。

  • 第 6 章《端到端测试 BookSwap Web 应用程序》 重点介绍了构建 REST API 应用程序,这是本书的主要演示工具。它涵盖了 Docker 容器化、数据库交互和端到端测试。

  • 第 7 章《Go 中的重构》 讨论了代码重构技术,这是开发过程中的一个重要部分。它讲解了如何利用接口来简化依赖关系的变化,以及如何将单体应用程序拆分成微服务架构。

  • 第 8 章《测试微服务架构》 探讨了微服务架构的测试挑战,微服务架构快速变化。它介绍了契约测试(Contract Testing),这种测试可以用于验证服务之间的集成。

  • 第 9 章《并发代码测试的挑战》 介绍了 Go 的并发机制——goroutinechannel,包括验证并发代码时的挑战。它还探讨了 Gorace detector 的使用和局限性。

  • 第 10 章《测试边缘情况》 通过模糊测试和基于属性的测试扩展了边缘情况和场景的测试。它还探讨了代码的健壮性,这使我们能够编写能处理各种输入的代码。

  • 第 11 章《使用泛型》 结束了我们对 GoTDD 的探索,重点讨论了泛型代码的使用和测试。它还讨论了如何为泛型代码编写表驱动测试,以及如何创建自定义的测试工具。