我正在使用minitest / mock并且想要模拟一个类.我不是试图测试模型类本身,而是试图测试服务(SomeService)与模型(SomeModel)的交互.
我想出了这个(Hack :: ClassDelegate),但我不相信这是个好主意:
require 'minitest/autorun' require 'minitest/mock' module Hack class ClassDelegate def self.set_delegate(delegate); @@delegate = delegate; end def self.method_missing(sym,*args,&block) @@delegate.method_missing(sym,&block) end end end class TestClassDelegation < MiniTest::Unit::TestCase class SomeModel < Hack::ClassDelegate ; end class SomeService def delete(id) SomeModel.delete(id) end end def test_delegation id = '123456789' mock = MiniTest::Mock.new mock.expect(:delete,nil,[id]) SomeModel.set_delegate(mock) service = SomeService.new service.delete(id) assert mock.verify end end
我很确定无论如何嘲笑一个类都不是一个好主意,但我有一个遗留系统,我需要编写一些测试,并且我不想更改系统,直到我对它进行了一些测试.
解决方法
我认为这有点复杂.那这个呢:
mock = MiniTest::Mock.new SomeService.send(:const_set,:SomeModel,mock) mock.expect(:delete,[1]) service = SomeService.new service.delete(1) mock.verify SomeService.send(:remove_const,:SomeModel)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。