2010-06-15 7 views
6

Sto cercando di costruire una prova contro un metodo eredità che implementano fuori i parametri. Potresti darmi un esempio su come farlo?Moq Esempio di utilizzo fuori e ref necessaria

+2

È necessario chiarire che cosa si sta facendo e perché non funziona come previsto. Solo "Moq with out parameters" non è abbastanza - per cominciare, perché hai bisogno di Moq? Si prega di mostrare un po 'di codice. –

+0

Abbastanza giusto. Devo inventarmi qualcosa in quanto l'ambiente è complicato. Mi chiedevo solo se ci fosse uno snippet completo da qualche parte. Tutto qui. Metterò insieme qualcosa e lo pubblicherò – user9969

risposta

19

Basta assegnare il parametro out o ref dal test.

Dato questa interfaccia:

public interface ILegacy 
{ 
    bool Foo(out string bar); 
} 

È possibile scrivere un test come questo:

[TestMethod] 
public void Test13() 
{ 
    string bar = "ploeh"; 

    var legacyStub = new Mock<ILegacy>(); 
    legacyStub.Setup(l => l.Foo(out bar)) 
     .Returns(true); 

    Assert.IsTrue(legacyStub.Object.Foo(out bar)); 
    Assert.AreEqual("ploeh", bar); 
} 
+0

fantastico. Tutto ciò di cui avevo bisogno. Ho solo qualcosa per farmi andare avanti. Una cosa però voi non ha ancora utilizzare la "It.IsAny" roba EG (Foo (fuori it.IsAny )); ho pensato che fosse una sorta di required.Could a chiarire sarei grateful.thanks – user9969

+0

Un sacco di It.Is * nel QuickStart troppo ... - Mi raccomando la lettura regolare della stessa - è solito essere in grado di digerire in un single pass (e stai facendo qualcosa di sbagliato se ti serve tutto in una singola suite di test!) –

+1

@ devnet247: come mai questo non vale un +1 da te - mostra poco rispetto per il tempo di Mark? (Qualcuno ha dato a Q anche un +1 - presumo sia Mark - Ho un -1 per contrastarlo come nessun compito fatto). + 1ing questa risposta. –

2

Qualche cosa male con il secondo esempio nella parte superiore di http://code.google.com/p/moq/wiki/QuickStart? Dovresti davvero dare esempi di ciò che stai cercando di fare se non hai intenzione di cercare cose come questa.

+0

Ho agree.I apologise.I davvero non so da dove cominciare su questo come il vero e proprio "codice reale" era un po 'complicato e non poteva inviare it.I dovrebbe avere costruire un esempio Noddy myself.Lesson imparato – user9969

+0

+1 I kinda dimenticato anche il quickstart :) –

1

Per inciso se si desidera utilizzare moq (attualmente) per simulare il parametro di uscita, è necessario eseguire anche il seguente salto del telaio. Diciamo che volevi prendere in giro un parametro out che restituiva un altro oggetto simulato, ad es.

var mockServiceA = new Mock<IMyService>(); 
var mockServiceOutput = new Mock<IMyServiceOutput>(); 

// This will not work... 
mockServiceA.Setup(svc => svc.DoSomething(out mockServiceOutput.Object)); 

// To have this work you have to do the following 
IMyServiceOutput castOutput = mockServiceOutput.Object; 
mockServiceA.Setup(svc => svc.DoSomething(out castOutput)); 
Problemi correlati