2012-03-27 14 views
3

2つのブールパラメータを受け取る関数をスタブする必要があります。最初は必須で2番目はオプションです。私がArg.Isを送信しようとすると、2番目の情報がなくても最初のものに何かがあると、私はエラーを受け取ります:RhinoMockのスタブ付きオプションパラメータ

System.InvalidOperationException: 、Arg.List、Arg.RefまたはArg.Out。 2つの議論が期待され、1つが定義されている。ここで

はスタブへの私のクラスのサンプルです:

public interface IOptionalParameterTester 
    { 
     bool IsValid(bool mustCheck, bool checkInDatabase = true); 
    } 

    public class OptionalParameterTester : IOptionalParameterTester 
    { 
     public bool IsValid(bool mustCheck, bool checkInDatabase = true) 
     { 
     if (checkInDatabase) 
      return true; 
     else 
      return false; 
     } 
    } 

そして、ここでは、テストのサンプルです:この場合

[Test] 
    public void ValidateProducerTest() 
    { 
    IOptionalParameterTester optionalParameter = MockRepository.GenerateStub<IOptionalParameterTester>(); 

    optionalParameter.Stub(x => x.IsValid(Arg<bool>.Is.Anything)).Return(true); 
    } 

、私はテストがエラーなしで渡したい場合最初のもの(Arg.Is.Anything)、または真または偽のような特定のブール値と同じ情報を定義する必要があります。

最初のパラメータにArg.Is.Anything以外を設定すると、エラーは発生しません。

バグですか?

各オプションパラメータの値を定義する必要がないように、RhinoMockでオプションを設定できますか?

セットアップがない場合は、このケース(ベストプラクティス、パターンなど)を処理するためのより良い方法がありますか?

ありがとうございます。

+1

情報についてhttp://stackoverflow.com/questions/6669623/c-sharp-mocking-framework-that-supports-optional-parameters-and-net-4-0 –

+0

ありがとう。私はMoqが大好きですが、現在作業しているプロジェクトはRhinoMockです。 – Samuel

答えて

1

これはRhino Mocksの制限であると思われますが(あなたが受け取ったエラーメッセージからその結論に至ることができます)、私はあなたのテスト戦略を変更することを提案します。

は、以下を実行してみてください。

[Test] 
    public void ValidateProducerTest() 
    { 
    bool anyBooleanValue = true; 
    IOptionalParameterTester optionalParameter = MockRepository.GenerateStub<IOptionalParameterTester>(); 

    optionalParameter.Stub(x => x.IsValid(anyBooleanValue)).Return(true); 
    } 

私はあなたのテストにあなたはRhinoのモックは、最初のパラメータを無視することを知っていて、それは、オプションの二番目にかかりますが、ロジックに応じて、テストしたいことを、最初のパラメータはハードコード、Rhino Mocksは不平を言ってはいけません。

あなたのテストでは、最初のパラメータの値が関連していないことが明確に示されていれば、テストは有効で読み込み可能です。

+0

ありがとうございました。私はこの場合、Arg .Is.As.thingの代わりに 'true'を設定するので、すべてのパラメータを設定すると思います。 – Samuel

0

ちょうど同様の問題に自分を持っていた、

optionalParameter.Stub(x => x.IsValid()).IgnoreArguments().Return(true);

0

を試してみてくださいこれは今かなり古い質問ですが、私はAssertWasCalledおよびオプションのパラメータに問題を抱えていたので、私は、このページに上陸しました。

最終的には、このページの次の構文を使用して問題を解決しました。http://petermorlion.blogspot.com/2012/11/rhinomock-assertwascalled-vs.html。参考

string expectedMessage = "RhinoMocks baby!"; 
string actualMessage = "RhinoMocks dude!"; 
var fooMock = MockRepository.GenerateMock<ifoo>(); 
fooMock.Bar(actualMessage); 

var calls = fooMock.GetArgumentsForCallsMadeOn(x => x.Bar(string.Empty), o => o.IgnoreArguments()); 
Assert.AreEqual(1, calls.Count); 
var arguments = calls[0]; 
Assert.AreEqual(expectedMessage, arguments[0]); 
関連する問題