2011-11-01 14 views
22

Devo simulare HttpResponseBase.ApplyAppPathModifier in modo che venga richiamato automaticamente il parametro ApplyAppPathModifier con la simulazione.È possibile trasferire i valori dei parametri in Moq?

ho il seguente codice:

var httpResponseBase = new Mock<HttpResponseBase>(); 
httpResponseBase.Setup(hrb => hrb.ApplyAppPathModifier(/*capture this param*/)) 
       .Returns(/*return it here*/); 

Tutte le idee?

EDIT:

trovato una soluzione sulla prima pagina della documentazione Moq (http://code.google.com/p/moq/wiki/QuickStart):

var httpResponseBase = new Mock<HttpResponseBase>(); 
httpResponseBase.Setup(hrb => hrb.ApplyAppPathModifier(It.IsAny<string>) 
       .Returns((string value) => value); 

improvvisamente mi sento molto stupido, ma credo che questo è ciò che accade quando si scrive codice a 23:30

+1

ho avuto la necessità di gettare un passato in ' Argomento di eccezione. Ho usato il metodo 'Callback()' (invece di 'Returns()') per lanciarlo. Solo per i posteri e la completezza. – gregsdennis

+0

@gregsdennis Ottimo! Grazie per la pubblicazione. Not notato 'Callback()' prima - forse è stato introdotto più recentemente. –

risposta

9

Uso It:

It.Is<MyClass>(mc=>mc == myValue) 

Qui è possibile verificare l'aspettativa: il valore che si prevede di ricevere. In termini di rendimento, basta restituire il valore necessario.

var tempS = string.Empty; 
var httpResponseBase = new Mock<HttpResponseBase>(); 
httpResponseBase.Setup(hrb => hrb.ApplyAppPathModifier(It.Is<String>(s=>{ 
      tempS = s; 
      return s == "value I expect"; 
      }))) 
       .Returns(tempS); 
+0

Grazie @Aliostad. Ho appena trovato la risposta alla soluzione (contrassegnando la tua come risposta). La soluzione è in realtà nella prima pagina della documentazione di Moq. All'improvviso mi sento molto più stupido, ma immagino che questo sia quello che succede quando scrivi il codice alle 23:30 ... –

23

Sì, è possibile eco indietro l'argomento passato al metodo

httpResponseBase.Setup(x => x.ApplyAppPathModifier(It.IsAny<string>())) 
       .Returns((string path) => path); 

è anche possibile catturare, se si vuole

string capturedModifier = null; 

httpResponseBase.Setup(x => x.ApplyAppPathModifier(It.IsAny<string>())) 
       .Callback((string path) => capturedModifier = path); 
Problemi correlati