假设我有一个由三个类组成的系统:A、B、C,它们共享某些依赖项。
要独立测试 A,我需要为 B 和 C 创建模拟对象 要独立测试 B,我需要为 A 和 C 等创建模拟对象......
因此,如果我想为 A、B 和 C 编写测试,我需要为它们中的每一个创建模拟类。我是否正确理解这一点?
假设我有一个由三个类组成的系统:A、B、C,它们共享某些依赖项。
要独立测试 A,我需要为 B 和 C 创建模拟对象 要独立测试 B,我需要为 A 和 C 等创建模拟对象......
因此,如果我想为 A、B 和 C 编写测试,我需要为它们中的每一个创建模拟类。我是否正确理解这一点?
我将您的示例解释为 A、B 和 C 都是相互依赖的,即依赖图中有六个边。在考虑如何对这样的设计进行单元测试之前,您可能会问自己是否真的需要那么多依赖项。这对社会来说是个好主意,但对代码库来说却不是。大量的相互依赖是脆弱、难以维护的代码的先驱。
答案是肯定的,但这通常是矫枉过正的。理想情况下,您的应用程序应该已经编程为接口,并且您应该能够选择模拟允许您独立测试组件的接口。
有人想模拟依赖关系。如果 A 依赖(即使用)B 和 C,则可能需要模拟 B 和 C,具体取决于该特定测试是否使用它们。
模拟的创建也不是一次性的事情。Mocks 用于测试期望并强制执行某些行为(例如,为了测试异常处理而抛出异常的函数)。