RSpecの組み込みモックフレームワークに対するMochaの利点は何ですか?
-
05-07-2019 - |
質問
多くの人が、RSpecの組み込みのモックフレームワークよりもMochaを好むことに気付きました。誰かが、モックフレームワークに組み込まれたRSpecに対するMochaの利点、または他の選択肢を説明できますか?
解決
私が本当に気に入っている機能の1つは、クラスのすべてのインスタンスをスタブできることです。多くの場合、RSpecモックで次のようなことを行います。
stub_car = mock(Car)
stub_car.stub!(:speed).and_return(100)
Car.stub!(:new).and_return(stub_car)
モカの場合:
Car.any_instance.stubs(:speed).returns(100)
Mochaのバージョンがより明確で、より明確になりました。
他のヒント
Rubyのモックフレームワークは、2009年にこの質問が尋ねられて以来、大きく進化しました。したがって、ここに2013年の小さな比較を示します。
期待
- Rspec-mocksを使用:
expect(user).to receive(:say_hello)
- Mochaを使用:
user.expects(:say_hello).once
オブジェクトのスタブ
- Rspec-mocksを使用:
user = double(name: 'John Doe')
- Mochaを使用:
user = stub(name: 'John Doe')
任意のスタブ
- Rspec-mocksを使用:
User.any_instance.stub(:name).and_return( 'John Doe')
- Mochaを使用:
User.any_instance.stubs(:name).returns( 'John Doe')
これらは同じ機能を提供し、両方ともRspecの有無にかかわらず使用できます。
ですから、どちらを選択するかは個人的な好みの問題です(そして、彼らはまったく同じ味です)。
私が知る限り、Mochaはダブルインジェクション(別名rrでもサポートされているパーシャルモッキング)をサポートしていますが、RSpecでもこの機能がサポートされているかどうかはわかりません。
また、テストフレームワークを切り替えることを好む人にとって、MochaはTest / Unit、Shouldaなどに適用できる汎用ソリューションです。これらすべてのライブラリでRSpecモックを使用すると、やり過ぎになります。
私はrspecを使用していないため、モカを使用しています。テスト/ユニットを使用していますが、テスト/ユニットにはスタブとモックが組み込まれていません。
所属していません StackOverflow