当前位置:嗨网首页>书籍在线阅读

08-测试替身以及依赖注入

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

8.4 测试替身以及依赖注入

测试替身(test double)是一种能够让单元测试用例变得更为独立的常用方法。当测试不方便使用实际的对象、结构或者函数时,我们就可以使用测试替身来模拟它们。因为测试替身能够提高被测试代码的独立性,所以自动单元测试环境经常会使用这种技术。

测试邮件发送代码是一个需要使用测试替身的场景:很自然地,你并不希望在进行单元测试时发送真正的邮件,而解决这个问题的一种方法,就是创建出能够模拟邮件发送操作的测试替身。同样地,为了对简单Web服务进行单元测试,我们需要创建出一些测试替身,并通过这些替身移除单元测试用例对真实数据库的依赖。

测试替身的概念非常直观易懂——程序员要做的就是在进行自动测试时,创建出测试替身并使用它们去代替实际的函数或者结构。然而问题在于,使用测试替身需要在编码之前进行相应的设计:如果你在设计程序时根本没有考虑过使用测试替身,那么你很可能无法在实际测试中使用这一技术。比如,上一节展示的简单Web服务的设计就无法在测试中创建测试替身,这是因为对数据库的依赖已经深深地扎根于这些代码之中了。

实现测试替身的一种设计方法是使用依赖注入(dependency injection)设计模式。这种模式通过向被调用的对象、结构或者函数传入依赖关系,然后由依赖关系代替被调用者执行实际的操作,以此来解耦软件中的两个或多个层(layer),而在Go语言当中,被传入的依赖关系通常会是一种接口类型。接下来,就让我们来看看,如何在第7章介绍的简单Web服务中使用依赖注入设计模式。