2009-10-22 4 views
5

Ich habe eine Klasse mit einer Abhängigkeit:Wie kann ich einen Func <T,TResult> in Rhino Mocks stubben?

private readonly IWcfClient<ITestConnectionService> _connectionClient; 

und ich möchte diesen Anruf Stub: dies möglich ist

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

:

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

derzeit nicht Dies funktioniert in Rhino?

Antwort

3

Verwenden Sie eine benutzerdefinierte delegieren Sie, dass die in der func und testen Sie nimmt. Sie können es tun, indem Sie es in einen Ausdruck umwandeln und die Ausdrucksbaumstruktur analysieren, oder führen Sie einfach den Delegaten mit einer Scheineingabe aus und testen Sie die Ergebnisse.

Folgendes wird einen Fehler auslösen, wenn das Lambda in RemoteCall() nicht enthält x => x.Execute ("test") - Sie können von der Idee arbeiten, um es genau das zu tun, was Sie wollen.

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

Wenn Sie nicht daran interessiert, den genauen Wert des „Test“ Parameter sind, können Sie Arg<> Konstrukt verwenden:

_connectionService.Stub(c => c.RemoteCall(Arg<Func<string, bool>>.Is.NotNull)) 
        .Return(true); 
Verwandte Themen