Rhinoはもう開発されていないことに注意してください1。新しいフレームワークは、このモックスタブの違いを完全に排除し、テストダブルに単一の用語を導入します。
モックフレームワークの進化は、テストケースのコンテキストに応じて別々の異なるものを使用するのではなく、「1つの汎用エンティティ」に向かって進んでいるようです。
その分離(モック、スタブ、フェイク)がどのように発生し、それがどのような目的を果たしたかについて詳しく知るには、テストダブルの連続性に関するMarkSeemannの記事を読むことをお勧めします。
極端な例では、実装がまったくないダミーが見つかります。もう一方の端には、完全な本番実装があります。ダミーと本番環境の実装はどちらも明確に定義されていますが、スタブ、スパイ、偽物を特定するのはより困難です。テストスパイはいつ偽物になりますか?さらに、モックは連続体のかなり大きな間隔に生息します。これは、モックが非常に複雑な場合もあれば、非常に単純な場合もあるためです。
Rhinoはモックとスタブを区別していないように見えるかもしれませんが、微妙な違いがあります。たとえば、スタブプロパティゲッターについて考えてみます。
var mock = MockRepository.GenerateMock<IService>();
mock.Stub(m => m.Property).Return(42);
これは、オブジェクトがモックであるときにそれを行う必要がある方法です。一方、スタブは、プロパティのセマンティクスを導入します。これにより、全体が簡単になります。
var stub = MockRepository.GenerateStub<IService>();
stub.Property = 42;
現時点で頭に浮かぶのはそれだけですが、もっとあるかもしれません。しかし、それでも、それらはほんの小さなニュアンスです。
1:2013年5月19日の時点で、これは当てはまらない可能性があります:RhinoMocksの新しい家