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

@int_argに格納されている「b」を実現するチャンスはありますか?そして、後でそれにアクセスして目的の出力を取得するには、次のようにします。

##########
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 に答える