1

我在 Ruby 应用程序中使用 ZMQ::Poller 并想编写一些 rspec 测试。由于轮询器提供了一个register-Method 来注册一个套接字,以后可以使用 访问它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
##########
4

1 回答 1

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
##########
于 2013-05-10T19:05:10.610 回答