2009-10-22 7 views
5

J'ai une classe avec une dépendance:Comment remplacer un Func <T,TResult> dans Rhino Mocks?

private readonly IWcfClient<ITestConnectionService> _connectionClient; 

et je veux bouchonner cet appel:

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

Ce ne fonctionne pas actuellement:

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

Est-ce possible dans Rhino?

Répondre

3

Utilisez une mesure déléguons qui prend en fonc et des essais qui. Vous pouvez le faire en le convertissant en une expression et en analysant l'arbre d'expression, ou simplement lancer le délégué avec une entrée fictive et tester les résultats. Ce qui suit va lancer une erreur si le lambda à l'intérieur de RemoteCall() ne contient pas x => x.Execute ("test") - vous pouvez travailler sur l'idée de l'obtenir pour faire exactement ce que vous voulez.

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

Si vous n'êtes pas intéressé par la valeur exacte du paramètre « test », vous pouvez utiliser Arg<> construction:

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