rspec で rr を使ってみた

インストール
# gem install rr
初期設定
  • spec ファイルの先頭に以下を追加
RSpec.configure do |config|
  config.mock_with :rr
end
mock の使い方
  • 最後の {} は戻り値
#テスト対象。Dir.glob の引数を評価したい。同時に戻り値も [] で返したい
Dir.glob("../src/exist_ver")

#mockコード
mock(Dir).glob("../src/exist_ver") {[]}
  • 2011/04/13追記: 複数回呼び出しを期待する場合
    • まったく同じ呼び出され方を複数回された場合はエラーになってしまうので、例えば2回呼び出されることを期待する場合は以下のように書く
    • .twice を付加する。3回以上はどうなるんだろう・・・。
#mockコード
mock(Dir).glob("../src/exist_ver").twice {[]}
stub の使い方
  • 戻り値のみ設定する
#stubコード
stub(Dir).glob {[]}

mock があれば stub は使わないんじゃ? 引数は厳密に判定したくはないが、戻り値をサクっと返して欲しいとかのケースなのかな。まだ使い分けがよく分かっていない。
あ、もしかして、渡された引数によって戻り値のバリエーションを変えたい場合などに mock を使うのかな。でも、同じ呼ばれ方で1度目と2度目で別の戻り値を返したい場合などはどう書くのだろう・・・。