为外部系统替换测试替身
在本节中,我们将讨论六边形架构为 TDD(测试驱动开发)带来的最大优势之一:高可测试性。它还为工作流程带来了一些优势。
用测试替身替换适配器
六边形架构为 TDD(测试驱动开发)带来的关键优势是,它可以轻松地用 测试替身(test doubles)替换所有适配器,从而使我们能够通过 FIRST 单元测试来测试整个领域模型。我们可以在没有测试环境、测试数据库或 HTTP 工具(如Postman
或 curl
)的情况下测试整个应用程序的核心逻辑——只需快速、可重复的单元测试。我们的测试设置如下:

Figure 1. Figure 9.7 – Testing the domain model
我们可以看到,所有适配器都被测试替身取代,完全摆脱了外部系统的环境。单元测试现在可以覆盖整个领域模型,减少了对集成测试的需求。
通过这样做,我们获得了以下几个好处:
-
我们可以轻松地先编写 TDD 测试:编写一个完全存在于内存中且不依赖于测试环境的简单测试替身没有任何障碍。
-
我们获得了 FIRST 单元测试的好处:我们的测试运行得非常快,并且是可重复的。通常,测试整个领域模型只需几秒钟,而不是几小时。测试会一致地通过或失败,这意味着我们不必担心构建失败是否是由于不稳定的集成测试失败引起的。
-
它解放了我们的团队:我们可以在不等待设计和构建测试环境的情况下,进行构建系统核心逻辑的有用工作。
创建测试替身的技术在第 8 章《测试替身——Stubs 和 Mocks》中已经概述。在实现这些替身方面,没有什么新的要求。
能够测试整个领域模型的一个结果是,我们可以将 TDD 和 FIRST 单元测试应用于更大的程序单元。下一节将讨论这对我们意味着什么。