En RhinoMocks, puede simplemente decir sus simulaciones a IgnoreArguments como una declaración general. En Moq, parece que debes especificar It.IsAny() para cada argumento. Sin embargo, esto no funciona para los argumentos de ref y out. ¿Cómo puedo probar el siguiente método donde necesito MOq la llamada de servicio interno para devolver un resultado específico:Cómo hacer que Moq ignore los argumentos que son ref o out
public void MyMethod() {
// DoStuff
IList<SomeObject> errors = new List<SomeObject>();
var result = _service.DoSomething(ref errors, ref param1, param2);
// Do more stuff
}
Método de ensayo:
public void TestOfMyMethod() {
// Setup
var moqService = new Mock<IMyService>();
IList<String> errors;
var model = new MyModel();
// This returns null, presumably becuase "errors"
// here does not refer to the same object as "errors" in MyMethod
moqService.Setup(t => t.DoSomething(ref errors, ref model, It.IsAny<SomeType>()).
Returns(new OtherType()));
}
ACTUALIZACIÓN: Por lo tanto, el cambio de los errores de "ref" a "fuera" funciona. Por lo tanto, parece que el verdadero problema es tener un parámetro de referencia que no pueda inyectar.
Se puede publicar la firma del 'DoSomething' porque en su muestra Tiene 3 argumentos' errores hacia fuera, param1, param2' pero en su prueba de que está llamando con dos argumentos 'errores hacia fuera, It.IsAny() 'Tal vez te estás burlando de una sobrecarga equivocada, porque tu código debería funcionar de todos modos, consulta la [sección de métodos de ayuda moq] (http://code.google.com/p/moq/wiki/QuickStart). –
nemesv
Eso fue solo un ejemplo, pero he actualizado la prueba para que sea paralelo al código de ejemplo – sydneyos