博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
有webservice参与的系统的单元测试, 使用mock object (三)
阅读量:4046 次
发布时间:2019-05-25

本文共 1425 字,大约阅读时间需要 4 分钟。

经过近4个工作日的整理,终于把整个系统基本都搞定:
[quote="使用了MOCK"]Finished in 32.84 seconds
390 examples, 0 failures, 6 pending[/quote]
[quote="原来的"]Finished in 21 minutes 11.65 seconds
421 examples, 13 failures[/quote]
现在33秒,对比以前的 20+ 分钟,好了太多了,起码不怕运行单元测试的时候睡着了。。。
6个pending ,是因为 难于MOCK。 例如: 使用了delayed_job, 调用者 与被调用者之前隔了4,5层关系,又来来回回参合了好几个delay_job,对象啥的。
一点儿心得:
1. 跟 double 相比, 手写的mock 对象非常给力. 例如:
原始对象:
class Banana   def color     "yellow"   end end
Mock对象
class MockBanana   def color     "color in MOCK mode"   end end
(或许,上述代码可以写成: )
# 更多,见:https://www.relishapp.com/rspec/rspec-rails/docs/mocks/mock-model mock_banana = double("Banana"){  :color => "color in MOCK mode"}
2. mock, stub 要混合使用。 两者适合不同的粒度: mock object, stub method.
不能认准一个不放。
3. 要使系统可以在 MOCK 和 正常模式下转换,例如: 加上一个条件限制:
it "balabala@balala.com should not exists in remote server" do   DeviceResource.any_instance.stub(:find){ [] } if ENV['with_real_webservice'] != "true"   get :check_if_exists_in_server, :email => "balabala@balala.com"   response.body.should == "false" end
然后调用的时候,可以有两种方式:
$ rspec spec
$ with_real_webservice=true rspec spec
4. 某些难于测试的方法,可能是由于设计太难造成,也可能是由于引入了 外部系统的原因造成。 解决办法是使用 设计模式 来让代码变整洁/简单/.
5. 最后, stub 的一点儿用法:
class Banana   def color     "yellow"   end   def self.size     "big"   end end # stub class method Banana.stub(:size) { "super big"} # stub instance method Banana.new.stub(:color) { "green" } Banana.any_instance.stub(:color) { " always yellow" }

转载地址:http://cwuci.baihongyu.com/

你可能感兴趣的文章
Android中AsyncTask的简单用法
查看>>
解决跨网场景下,CAS重定向无法登录的问题(无需修改现有代码)
查看>>
java反编译命令
查看>>
activemq依赖包获取
查看>>
概念区别
查看>>
final 的作用
查看>>
在Idea中使用Eclipse编译器
查看>>
idea讲web项目部署到tomcat,热部署
查看>>
Idea下安装Lombok插件
查看>>
zookeeper
查看>>
Idea导入的工程看不到src等代码
查看>>
技术栈
查看>>
Jenkins中shell-script执行报错sh: line 2: npm: command not found
查看>>
8.X版本的node打包时,gulp命令报错 require.extensions.hasownproperty
查看>>
Jenkins 启动命令
查看>>
Maven项目版本继承 – 我必须指定父版本?
查看>>
通过C++反射实现C++与任意脚本(lua、js等)的交互(二)
查看>>
利用清华镜像站解决pip超时问题
查看>>
微信小程序开发全线记录
查看>>
CCF 分蛋糕
查看>>