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度目で別の戻り値を返したい場合などはどう書くのだろう・・・。