mock によって返ってくる値を呼び出す度に変更する

↓こんな感じでやる。

a = []
a.should_receive(:size).ordered.and_return(1)
a.should_receive(:size).ordered.and_return(2)
a.should_receive(:size).ordered.and_return(3)

5.times do
  p a.size
end

↓結果。設定した回数以上に呼び出すと、最初の物が繰り返されるらしい。

1
2
2
1
1

ordered で、メソッドの呼び出された順を確認可能というのは知っていたけど、これは知らなかった。
当たり前といえば、当たり前の動きではあるのだけど。