respuesta de Gamlor trabajó para mí, pero yo pensaba que iba a ampliar el comentario de John Carpenter, porque yo estaba buscando una solución que implica más de un parámetro. Pensé que otras personas que tropezarían con esta página podrían estar en una situación similar. Encontré esta información en el Moq documentation.
Usaré el ejemplo de Gamlor, pero supongamos que el método AsyncHandle toma dos argumentos: un string
y un objeto SomeResponse
.
var mock = new Mock<Handler>();
string stringResult = string.Empty;
SomeResponse someResponse = null;
mock.Setup(h => h.AsyncHandle(It.IsAny<string>(), It.IsAny<SomeResponse>()))
.Callback<string, SomeResponse>((s, r) =>
{
stringResult = s;
someResponse = r;
});
// do your test
new Foo(mock.Object).Bar(22);
Assert.AreEqual("expected string", stringResult);
Assert.IsNotNull(someResponse);
Básicamente sólo tiene que añadir otro It.IsAny<>()
con el tipo apropiado, añadir otro tipo con el método Callback
, y cambiar la expresión lambda según corresponda.
¿Querías decir "AsyncHandle" (extra "n")? ¿Y podría publicar el código para Handler o especificar el nombre del tipo completo si es un tipo estándar? – TrueWill
¿Puedes mostrar tu prueba de esqueleto para mostrar lo que estás pensando? Si bien aprecio que por su parte es obvio, por nuestro lado, parece que alguien que no se ha tomado el tiempo para hacer que la pregunta responda sin hacer una respuesta especulativa larga. –
No hay ni un Foo ni un Bar() ni nada de eso. Es solo un código de demostración para mostrar la situación en la que me encuentro sin distracciones de los detalles de las aplicaciones. Y obtuve la respuesta, esperaba obtener. – Jan