外驱开发与行为驱动开发全解析
外驱测试驱动开发(Outside-In TDD)
在软件开发过程中,当面临特定阶段时,通常有两种选择。可以采用广度优先策略,继续实现 Cook 方法,确保当前抽象层次的工作完成;或者实现 MicrowavesGenerator 类中的 SwitchOnFor 方法。其流程都是先编写公共接口,再延迟实现,不断重复这个过程。
如果不从 Main 方法开始,而是使用测试驱动代码,并通过模拟对象(mocks)或桩(stubs)注入协作者的依赖,这种方法会更强大,这就是伦敦学派测试驱动开发(TDD)的核心思想。
外驱TDD也被称为伦敦学派TDD、验收测试驱动开发(ATDD)或模拟主义TDD。在这种方法中,我们使用模拟对象来勾勒对系统中尚不了解部分的设计。与经典TDD不同,我们不会等到代码混乱后再提取子组件,而是在编写测试时就用模拟对象来勾勒它们。在经典TDD中,大多数设计决策在重构阶段做出;而在外驱TDD中,关于公共接口的设计决策在测试失败阶段(红阶段)就已确定。
这里,责任的概念至关重要。识别不同的责任能让我们了解可能需要的协作类型。在这个阶段,无需实现子模块,因为可以为其创建桩并模拟其行为以进行测试。这一操作本身就是一个关键的设计决策,因为我们实际上是在设计协作者的公共接口,将实现的上下文切换推迟。这本质上是一种将问题分解为子任务的方法,一次解决一个抽象层的问题,而不是立即深入细节。这种方法的优势在于能让思维一次专注于一个子问题、一个责任和一个抽象层次。
外驱TDD和经典TDD的另一个重大区别在于断
超级会员免费看
订阅专栏 解锁全文
1万+

被折叠的 条评论
为什么被折叠?



