2011-10-11 3 views
6

RhinoMockでスタブオブジェクトを強制して、voidメソッドを無効にする方法はありますか?どのようにしてStubオブジェクトからVoidを返すvoidメソッドを強制することができますか?

この例を見てみましょう:

public interface ICar 
{ 
    string Model {get;set;} 
    void Horn(); 
} 

ICar stubCar= MockRepository.GenerateStub<ICar>(); 
stubCar.Expect(c=>c.Horn()).Return(//now what so that 
            // it returns nothing as the meth. returns void ? 
+0

void戻り値の型で定義されている場合、どのように返されますか? – CodingGorilla

+0

私は、voidを返すように強制しないと、このスタブの呼び出しは例外をスローします。私は試して見た:ジョンは正しかった! – pencilCake

答えて

8

値を返すことはできません方法 - それはvoidメソッドです。 CLRはを返しません。は値を返そうとします。これをテストする必要はありません。

Expectコールが必要です。

6

Return()メソッドは、voidメソッド呼び出しでは無効です。 Horn()が呼び出されたかどうかを教えてくれます

ICar stubCar= MockRepository.GenerateStrictMock<ICar>(); 
stubCar.Expect(c=>c.Horn()); 
stubCar.DoSomethingThatIsSupposedToCallHorn(); 
stubCar.VerifyAllExpectations(); 

:むしろ、あなたはこのような何かをしたいです。

これは、単体テスト時にvoidメソッドが呼び出されることをテストする方法です。あなたは、次の操作を行います。

  1. が期待メソッドが呼び出されたことを確認してください期待
  2. を呼び出す必要があり期待(Expect()
  3. 呼び出し方法を設定します。
+0

あなたはモックではなくスタブを使用しており、スタブは常にVerifyAllExpectationsを渡すので、これはうまくいかないと思います。 参照:http://www.wrightfully.com/on-rhino-mocks-verifyallexpectations-vs-assertwascalled/ – crabCRUSHERclamCOLLECTOR

+0

それは厳しいモックでなければなりません。私はそれを変更します。それをキャッチするためにありがとう。 –

関連する問題