2011-09-26 17 views
11

Sono ovviamente confuso: questo è un compito che ho realizzato con molti altri framework che stiamo considerando (NMock, Moq, FakeItEasy). Ho una chiamata di funzione che vorrei stubare. La chiamata di funzione ha un parametro out (un oggetto).Parametri di uscita con RhinoMocks

La chiamata di funzione è in un caso d'uso chiamato più volte all'interno del codice. Il codice chiamante inserisce i parametri, incluso un oggetto NULL per il parametro out. Mi piacerebbe impostare un parametro OUT previsto, in base agli altri parametri forniti.

Come è possibile specificare un parametro di INBOUND previsto di NULL, e un parametro OUTBOUND previsto di un oggetto popolato nel modo in cui lo aspetto? L'ho provato in sei modi alla domenica, e finora non sono stato in grado di ottenere nulla indietro ma NULL per il mio parametro OUTBOUND out.

risposta

20

Da http://ayende.com/wiki/Rhino+Mocks+3.5.ashx#OutandRefarguments:

Rif e le argomentazioni sono speciali, perché si hanno anche per rendere il compilatore felice. Le parole chiave ref e out sono mandanti, e hai bisogno di un campo come argomento. Arg non vi deluderà:

User user; 
if (stubUserRepository.TryGetValue("Ayende", out user)) 
{ 
    //... 
} 
stubUserRepository.Stub(x => 
    x.TryGetValue(
    Arg.Is("Ayende"), 
    out Arg<User>.Out(new User()).Dummy)) 
    .Return(true); 

out è mandante per il compilatore. Arg.Out (new User()) è la parte importante di per noi, specifica che l'argomento out deve restituire nuovo utente(). Dummy è solo un campo del tipo specificato User, per rendere il compilatore felice.

+0

Io non funziona per il muso di rinoceronte 3.6 sebbene ... –

+0

Il collegamento ora ottiene un 404 non trovato. – jakejgordon

6

In caso utilizzando repository per generare Mock/Stub

checkUser = MockRepository.GenerateMock<ICheckUser> 

È possibile aspettativa di installazione con il parametro fuori

checkUser 
.Expect(c => c.TryGetValue(Arg.Is("Ayende"), out Arg<User>.Out(new User()).Dummy) 
.Return(true) 
+1

Non funziona per Rhino Mocks 3.6 anche se ... –

4

Questa soluzione è più pulito e funziona bene con Rhino Mocks 3.6:

myStub.Stub(x => x.TryGet("Key", out myValue)) 
     .OutRef("value for the out param") 
     .Return(true); 
Problemi correlati