第 7 章 Go中重构
我们已经探索了整个测试金字塔中的概念和技术,并在构建主要研究项目——BookSwap 应用程序时应用了这些概念。当前,这个 Web 应用程序通过以下方式进行验证:
-
使用 Go 标准库实现的单元测试
-
使用
httptest
实现的集成测试 -
使用 Godog 实现的端到端测试
为了在一个现实的例子中演示这些技术,我们扩展了 BookSwap 应用程序的功能,增加了多个组件。在第 6 章《端到端测试 BookSwap Web 应用程序》中,我们通过添加 Docker 支持和使用 PostgreSQL 数据库来保存数据,进一步扩展了项目。
所有这些变更为我们的 BookSwap 应用程序增加了复杂性,现在它依赖于以下内容:
-
两个用于数据库迁移和操作的库——
golang-migrate
和gorm
-
三种不同类型的文件——源代码文件、实现文件和 Docker 文件
-
一个复杂的代码结构,包含多个层次——
db
、handlers
和cmd
BookSwap 应用程序最初是一个简单的 REST API,功能范围较小。然而,随着我们不断改进并添加更多代码,应用程序的安装和启动变得越来越复杂。这是软件项目自然生命周期的一部分。作为一名工程师,您更常遇到的是修改和扩展现有代码,进行棕地开发,而不是从零开始实现全新的项目,也就是绿地开发。
本章专门讨论代码重构,即修改和重组现有代码。基于我们在实现和测试 BookSwap 应用程序中的经验,我们将学习代码重构的良好实践。接着,我们将了解如何验证重构后的代码的行为,它应该与其旧版代码表现和行为一致。最后,我们将讨论将单体应用程序拆分为微服务的最佳实践。
在本章中,我们将涵盖以下主题:
-
什么是代码重构,为什么它是开发过程中的重要环节
-
如何有效地改变实现和测试代码
-
Go 中的错误验证
-
如何验证重构成功的标准
-
拆分单体应用程序的良好实践
技术要求
为了运行本章中的代码示例,您需要安装 Go 1.19 或更高版本。安装过程可以参考官方 Go 文档,地址为 https://go.dev/doc/install。
本书中的代码示例可以在 https://github.com/PacktPublishing/Test-Driven-Development-in-Go/chapter07 上公开获取。