单元测试——破除依赖

痛点是什么

要测试的对象依赖另一个你无法控制(或者还未实现)的对象。这个对象可能是Web服务、系统时间、线程调试、接口或者其他。
重要的问题是:你的测试代码不能控制这个依赖的对象向你的代码返回什么值,也不能控制它的行为(例如想模拟一个异常)。

何以解忧,唯有存根或者模拟对象

什么是存根

一个存根是对系统中存在的一个依赖项(或者协作者)的可控制的替代物。通过使用存根,你在测试代码时无需直接处理这个依赖项。
762312-20151027104630544-651851225.png

什么是模拟对象

模拟对象是系统中的伪对象,它可以验证被测试对象是否按预期的方式调用了这个伪对象,因此通过或者是失败。通常每个测试最多有一个模拟对象

存根和模拟对象区别

它们二者其他都是伪对象。二者最根本的区别是存根不会导致测试失败,而模拟对象可以。即存根不参与断言,而模拟对象参与断言。
762312-20151027110025669-1738661296.png

怎么实现

手工

竟然还想着手工实现。。。。但是还是简单说一下原理,如果有想深入了解,可以参见《单元测试的艺术》

  • 加一个中间层,让测试类实现它,然后编写一个用于单元测试的实现类
  • 继承测试类,编写一个单元测试的实现类,重写方法并赋值返回值。
  • 通过工厂创建存根对象
  • 通过Ioc创建存根对象
  • 通过反射注入属性生成存根对象
  • ......

框架

目前也在找比较适合的框架。所说EasyMock太过时了,还要使用PowerMock。Jmockito和其他的不受限的mock框架还在学习中。正在觅食一个能降低隔离复杂度的框架。
下面陈述一下我想找的隔离框架的几个特性

  1. 支持AAA原则,即“准备——执行——断言”结果的框架,不大想用“录制——重放”的方法。因为不自然。
  2. 框架必须是不受限的。可以支持静态方法,私有构建等。哈哈,因为我比较贪心
  3. 框架有比较友好的文档。这样可以降低学习曲线。
  4. 框架的语法,看得更自然舒服些。毕竟要用很久,顺眼很重要!!
  5. 最好是能支持灵活的参数mock。就像EasyMock.anyString()。因为有些参数确实不想关心。

转载于:https://www.cnblogs.com/ansn001/p/4913517.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值