2009-10-22 9 views
5

私は、依存関係を持つクラスを持っている:Rhino MockでFunc <T,TResult>をスタブするにはどうすればよいですか?

private readonly IWcfClient<ITestConnectionService> _connectionClient; 

と私は、このコールアウトスタブにしたい:動作していない現在、

_connectionClient.RemoteCall(client => client.Execute("test")); 

これを:

_connectionService 
    .Stub(c => c.RemoteCall(rc => rc.Execute("test"))) 
    .Return(true); 

が、このことは可能ですRhinoで?

答えて

3

をFUNCに取り、そのテストデリゲートを実行します。式に変換して式ツリーを解析するか、疑似入力を使ってデリゲートを実行して結果をテストすることで、それを実行できます。

RemoteCall()内のラムダにx => x.Execute( "test")が含まれていないと、次のようなエラーが発生します。

public interface IExecute { 
    void Execute(string input) 
} 
_connectionService 
    .Stub(c => c.RemoteCall(null)).IgnoreArguments() 
    .Do(new Func<Action<IExecute>,bool>(func => { 
     var stub = MockRepository.GenerateStub<IExecute>(); 
     func(stub); 
     stub.AssertWasCalled(x => x.Execute("test")); 
     return true; 
    }));; 
3

あなたは、「テスト」のパラメータの正確な値に興味がない場合は、Arg<>構文を使用することができますカスタムを使用し

_connectionService.Stub(c => c.RemoteCall(Arg<Func<string, bool>>.Is.NotNull)) 
        .Return(true); 
関連する問題