Rspecテストを書くとき、私はしばしばに不満を感じshould_receive
ます。邪魔にならない代替手段があるかどうか知りたいのですが。
例えば:
describe "making a cake" do
it "should use some other methods" do
@baker.should_receive(:make_batter)
@baker.make_cake
end
end
toの呼び出しは適切な説明ですが、元のメソッドをマスクすることで機能し、実際にバッターを返さない限り続行できないshould_receive
ため、コードが壊れます。だから私はそれをこれに変更します:should_receive
make_cake
make_batter
@baker.should_receive(:make_batter).and_return(@batter)
これは醜い理由です:
- 正しく返されることをテストしているように見えますが、実際にはの偽のバージョンにそれを返すように強制しています。
make_batter
@batter
make_batter
- それは私に別々にセットアップすることを強制します
@batter
- 重要な副作用がある場合
make_batter
(コードの臭いである可能性があります)、私もそれらを起こさなければなりません。
should_receive(:make_batter)
それがメソッド呼び出しを検証し、それを元のメソッドに渡すことを望みます。より良い分離テストのためにその動作をスタブしたい場合は、明示的に行います@baker.stub(:make_batter).and_return(@batter)
。
should_receive
元のメソッド呼び出しを妨げずに、のようなことを行う方法はありますか?私の問題は悪いデザインの症状ですか?