2011-10-20 7 views
7

私はRhinoMocksバージョン3.6を使用していますが、私はRecord-Replayを使用していないので、モックでアサートするためのVerifyメソッドを呼び出さないためです。StrictMockとPartialmockの違いを説明できますか?

非常に簡単な違いは何ですか?

MockRepository.GenerateMock() 
MockRepository.GeneratePartialMock() 
MockRepository.GenerateStrictMock() 

注:私はMockを作成するために常に.GenerateMockを使用していますが、引数expectをすでに指定してメソッド呼び出しをアサートしています。

答えて

16

違いは、あなたがStrictMockに何の期待を作成していない、とメソッドはモックに呼び出される場合は、例外がスローされますexplained in this article

です。

PartialMockに期待値を作成せず、メソッドがモックで呼び出された場合は何も起こりません。そのモックが基本クラスから派生している場合、呼び出しは既存の基本実装に引き渡されます。

DynamicMockと呼ばれるものもあります。 DynamicMockで期待値を作成せず、メソッドがモックで呼び出されると、スタブメソッドが呼び出されます。戻り値があった場合は、デフォルト値(nullまたは0)が返されます。

GenerateMock私はDynamicMockを作成すると信じています。

アデンデーはDynamicMockStubを使用することを推奨しているため、このデフォルトを選択しました。 StrictMockは脆弱なテストを作成し、通常テストごとに1つの動作のみを検証するという概念に違反します。

この記事を参照してください。http://ayende.com/wiki/Rhino%20Mocks%203.5.ashx#CreateMockisdeprecated,replacedbyStrictMockTheuseofStrictMockisdiscouraged

私も、彼は厳重なモックを開始することに有用であると言う、あなたはどのようにあなたのコードに慣れたら、バックダウンダイナミックモック/スタブにテストを働く見てきましたテスト中は動作しています。そのthoのためのリンクはありません:)

0

私はAyendeの言葉によって "Strict Mockの使用は落胆します"と追加する必要があります。 http://ayende.com/wiki/Rhino+Mocks+3.5.ashx#CreateMockisdeprecated,replacedbyStrictMockTheuseofStrictMockisdiscouraged

彼は言う:期待されていない何かが彼らに が起こるかどう

厳格なモックは失敗します。つまり、 テストのコードを変更すると、変更が このテストで実際にテストしていることとは関係がなくても、テストが中断される可能性があります。

代わりにスタブと動的モックを使用することをお勧めします。

関連する問題