我在Ruby应用程序中使用ZMQ :: Poller,并希望编写一些rspec测试。由于轮询器提供register
- 方法来注册套接字,以后可以使用readables
访问,我需要以某种方式在我的模拟对象中保存已注册的套接字。
我认为这样的模式如下:
@int_var = 'a'
tst_mock = mock('Test')
tst_mock.stub(:save_method) do |arg|
@int_var = arg
end
tst_mock.stub(:return_method).and_return(@int_var)
puts "##########"
puts tst_mock.return_method
tst_mock.save_method('b')
puts tst_mock.return_method
puts "##########"
是否有机会将'b'存储在@int_arg中?并在以后访问它以获得所需的输出:
##########
a
b
##########
答案 0 :(得分:2)
:return_method
的存根每次都会返回a
,因为这是注册存根时传递给它的值。
您希望它是动态的,因此将块传递给返回正确值的存根。
@int_var = 'a'
tst_mock = mock('Test')
tst_mock.stub(:save_method) do |arg|
@int_var = arg
end
# Passing a block, defer calculating of response until needed
tst_mock.stub(:return_method) do
@int_var
end
puts "##########"
puts tst_mock.return_method
tst_mock.save_method('b')
puts tst_mock.return_method
puts "##########"
将输出:
##########
a
b
##########