2011-11-01 10 views
22

Necesito simular HttpResponseBase.ApplyAppPathModifier de tal manera que se llama al parámetro ApplyAppPathModifier con el que es devuelto automáticamente por el simulacro.¿Es posible pasar valores de parámetro en Moq?

tengo el siguiente código:

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

¿Alguna idea?

EDIT:

encontrado una solución en la primera página de la documentación 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); 

repente me siento mucho más tonto, pero creo que esto es lo que ocurre cuando se escribe código en 23:30

+1

que tenía una necesidad de lanzar un pasado en ' Excepción 'argumento. Usé el método 'Callback()' (en lugar de 'Returns()') para lanzarlo. Solo para la posteridad y la integridad. – gregsdennis

+0

@gregsdennis ¡Genial! Gracias por publicar. No se notó 'Callback()' antes, tal vez se introdujo más recientemente. –

Respuesta

9

uso It:

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

Aquí puede verificar las expectativas: el valor que espera recibir. En términos de devolución, simplemente devuelva el valor que necesita.

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

Gracias @Aliostad. Acabo de encontrar la solución también (marcando la tuya como respuesta). La solución se encuentra en la primera página de la documentación de Moq. De repente me siento mucho más estúpido, pero supongo que esto es lo que sucede cuando escribes código a las 23:30 ... –

23

Sí, se puede devolver un eco del argumento pasado al método

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

También puede capturar si quieres

string capturedModifier = null; 

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