2009-11-12 1 views
36

を返すメソッド、私はかかわらずに渡されているものの、方法をスタブする必要があり、常にそれが第三引数を返します:RhinoMocks - スタブ私はRhinoMocksを使用しています。パラメータ

明らか
_service.Stub(x => x.Method(parm1, parm2, parm3)).Return(parm3); 

、それをそれほど簡単ではありません。私はいつもparmsが何になるのか分からないが、私はいつも第3のものを返そうと思っている。

+0

を、私はこれが可能であるかどうかわからないです。テストしようとしているメソッドを投稿できますか? –

+0

このメソッドは、静的クラスから別のメソッドへの呼び出しを返します。基本的に、呼び出しはデータベース内で最初のパラメーターが存在するかどうかを調べ、一致しない場合は3番目のパラメーターを返します。 – Martin

+0

これはMoq –

答えて

65

あなたはDo() handlerとメソッドの実装を提供することができます。

Func<TypeX,TypeY,TypeZ,TypeZ> returnThird = (x,y,z) => z; 
mock.Expect(x => x.Method(null, null, null)).IgnoreArguments().Do(returnThird); 

注それは入力引数の型と戻り値の型の両方であるため、TypeZが二回表示されていること。

+2

素晴らしいケーキです。これは完璧に機能しました。 – Martin

+1

これは、質問にあるように '.Stub()'の代わりに '.Expect()'を使用しています。 – ANeves

0

コールバックを使用してexpectメソッドを使用して、後の値を返すことができます。以下はnullを返します。

_service.Expect(o => o.Method(null, null, null)) 
     .Callback((object parm1, object parm2, object parm3) => { return parm3; }); 

スタブでコールバックを使用できるかどうかわかりません。

6

これが私の仕事:

 _service 
      .Stub(x => x.Method(Arg<string>.Is.Anything, ...)) 
      .Return(null) // ... or default(T): will be ignored but RhinoMock requires it 
      .WhenCalled(x => 
      { 
       // This will be used as the return value 
       x.ReturnValue = (string) x.Arguments[0]; 
      }); 
関連する問題