2009-10-22 13 views
5

Mam klasy z zależnością:Jak mogę odgadnąć Func <T,TResult> w Rhino Mocks?

private readonly IWcfClient<ITestConnectionService> _connectionClient; 

i chcę skrótową z tej rozmowy:

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

ta obecnie nie działa:

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

Czy to możliwe w Rhino?

Odpowiedz

3

użyć niestandardowego Czy delegata, które odbywają się w func i przetestować to. Możesz to zrobić, konwertując go do wyrażenia i analizując drzewo wyrażeń, lub po prostu uruchom delegata z próbnym wprowadzeniem i przetestuj wyniki.

Następujące spowoduje błąd, jeśli lambda w RemoteCall() nie zawiera x => x.Execute ("test") - możesz odłączyć się od pomysłu, aby zrobić dokładnie to, co chcesz.

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

Jeżeli nie jesteś zainteresowany dokładną wartość parametru „test”, można użyć Arg<> konstrukt:

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