2013-01-09 56 views
1

我在Ruby应用程序中使用ZMQ :: Poller,并且想要编写一些rspec测试。由于轮询提供了一个register - 方法注册一个插座,它可以在以后使用readables访问,我需要在我的嘲笑对象保存注册插座莫名其妙。RSpec模拟对象和(状态)变量

我觉得这个模式会像如下:

@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 
########## 

回答

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 
##########