Muchas buenas respuestas aquí! Vaya con el conjunto de características Moq listo para usar hasta que necesite hacer afirmaciones sobre varios parámetros de clase pasados a sus dependencias. Sin embargo, si termina en esa situación, la función de verificación de Moq con It. Sus coincidencias no hace un buen trabajo al aislar la falla de la prueba, y la forma de devolución / devolución de llamada de capturar argumentos agrega líneas de código innecesarias a su prueba (y las pruebas largas son un no-go para mí).
Aquí hay una idea general: https://gist.github.com/Jacob-McKay/8b8d41ebb9565f5fca23654fd944ac6b con una extensión Moq (4.12) que escribí que ofrece una forma más declarativa de hacer afirmaciones sobre los argumentos pasados a los simulacros, sin los inconvenientes mencionados anteriormente. Así es como se ve la sección Verificar ahora:
mockDependency
.CheckMethodWasCalledOnce(nameof(IExampleDependency.PersistThings))
.WithArg<InThing2>(inThing2 =>
{
Assert.Equal("Input Data with Important additional data", inThing2.Prop1);
Assert.Equal("I need a trim", inThing2.Prop2);
})
.AndArg<InThing3>(inThing3 =>
{
Assert.Equal("Important Default Value", inThing3.Prop1);
Assert.Equal("I NEED TO BE UPPER CASED", inThing3.Prop2);
});
Me entusiasmaría si Moq proporcionara una función que lograra lo mismo mientras fuera declarativa y proporcionara el aislamiento de falla que esto hace. ¡Dedos cruzados!