腾讯WeTest测试技术分享软件测试软件测试职业探索

单元测试之如何破除外部依赖

2016-07-27  本文已影响896人  桃子妈咪

一个外部依赖项是系统中的一个对象,被测试代码与这个对象发生交互,但不能控制这个对象(不能控制这个对象返回值;不能控制这个对象的具体行为;对象还未实现)。常见的依赖包括系统时间、Web服务、文件系统、数据库服务、内存等。如何破除这些外部依赖,如何与他们进行交互测试就是本篇文章讨论的主要内容。

使用Stub破除依赖

Stub可以看做是一个依赖项的 ** 可控制 **的替代物,即伪造的对象。利用Stub,使被测试代码可以得到所有需要的输入,独立地测试了代码逻辑。破除依赖首先需要找到被测试工作单元使用的外部接口,然后把这个接口的底层实现替换成Stub。这里的『替换』就是我们常说的『依赖注入』,下面介绍几种常见的依赖注入方法。

使用Mock进行交互测试

在上一篇『单元测试之如何编写优秀的单元测试用例』中,我们了解了工作单元有三种最终结果:返回值、内部状态改变、调用第三方对象。基于值的测试验证了一个函数的返回值;基于状态的测试改变被测试对象的状态,然后验证其可见的状态变化;交互测试则是验证一个对象如何向其他对象发送消息的测试。实际单元测试中,优先考虑基于值、基于状态的测试方法,因为这两种测试可以减少对代码内部细节的假设。

Mock是系统中一个伪造的对象,它可以验证被测试对象是否按照预期的方式调用了这个伪对象。Mock与Stub都是伪对象,但是使用Stub时,Stub只是辅助测试运行,单元测试代码仍然是对工作单元进行断言;使用Mock时,Mock对象会记录所有工作单元与其进行的通讯,单元测试代码是对Mock对象进行断言,用来检验交互。

隔离框架应运而生

前面介绍了Stub和Mock在单元测试中的重要作用,但是如果使用手工的Stub和Mock会出现一些缺陷:

隔离框架是一套API,使用这套API可以在运行时创建和配置伪对象。下面介绍隔离框架常见功能:

上一篇 下一篇

猜你喜欢

热点阅读