RSpecの組み込みモックフレームワークに対するMochaの利点は何ですか?

StackOverflow https://stackoverflow.com/questions/1406692

質問

多くの人が、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を使用していないため、モカを使用しています。テスト/ユニットを使用していますが、テスト/ユニットにはスタブとモックが組み込まれていません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top