variable tipos referencia programacion por pasar parametros objetos metodos metodo funciones estructura consola como clases c# unit-testing parameters moq

tipos - pasar objetos como parametros en c#



¿Puedo usar Moq para verificar que se invocó un método falso con valores específicos en un parámetro complejo? (1)

Asume que me estoy burlando de la siguiente clase:

public class ClassAParams { public int RequestedId { get; set; } public string SomeValue { get; set; } } public class ClassA { public void ExecuteAction(ClassAParams executeParams) {} }

Ahora digo que tengo otra clase (llamémoslo ClassB ) para la que estoy creando una prueba de unidad, y quiero asegurarme de que cuando se ClassB.Execute() , ClassB llame a ClassA.ExecuteAction() pero quiero hacer Asegúrese de que el parámetro con el que llama ese método tenga un valor ClassAParams.RequestedId de 1.

Normalmente, manejaría esto haciendo myMock.Verify(x => x.ExecuteAction(new ClassAParams { RequestedId = 1, SomeValue = "something" }));

El problema es que no quiero verificar el valor del parámetro SomeValue ni ninguna otra propiedad de ClassAParams en esta prueba unitaria. Las otras propiedades se verificarán en otras pruebas unitarias, pero tener que verificar que se llama con las propiedades correctas en cada prueba unitaria (incluso cuando no me importa en el alcance de las pruebas de una unidad específica) hará que el mantenimiento de la unidad sea molesto.

¿Hay alguna forma de utilizar Moq para verificar que la estructura que pasa a un método simulado solo tiene ciertas propiedades como un valor específico e ignora el resto?


Existe una sobrecarga para el mock.Verify que te permite probar algo. Aquí hay un ejemplo que debería funcionar para su prueba.

classA.Verify( a => a.ExecuteAction( It.Is<ClassAParams>(p => p.RequestedId == 12) ) );

Lo que significa que "Para cualquier ClassAParams pasado como argumento, verifique que RequestId igual a 12" .