2009-10-22 14 views
5

Ho una classe con una dipendenza:Come si esegue lo stub di un Func <T,TResult> in Rhino Mocks?

private readonly IWcfClient<ITestConnectionService> _connectionClient; 

e voglio spegnere questa chiamata:

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

questo momento non funziona:

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

Questo è possibile in Rhino?

risposta

3

Utilizzare una consuetudine Do delegato che prende in func e testare questo. Puoi farlo convertendolo in un'espressione e analizzando l'albero delle espressioni, oppure eseguendo il delegato con un input fittizio e testando i risultati.

Quanto segue genera un errore se il lambda all'interno di RemoteCall() non contiene x => x.Execute ("test") - puoi lavorare fuori dall'idea per farlo fare esattamente ciò che desideri.

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

Se non si è interessati al valore esatto del parametro "test", è possibile utilizzare Arg<> costrutto:

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