2011-06-11 17 views
32

Así que asumen estoy burlando de la clase siguiente:¿Puedo usar Moq para verificar que se invocó un método falso con valores específicos en un parámetro complejo?

public class ClassAParams 
{ 
    public int RequestedId { get; set; } 
    public string SomeValue { get; set; } 
} 

public class ClassA 
{ 
    public void ExecuteAction(ClassAParams executeParams) {} 
} 

Ahora dicen que tengo otra clase (vamos a llamarlo ClassB) que estoy creando una unidad de pruebas para, y quiero para asegurarse de que cuando ClassB.Execute() se llama , que ClassB llama ClassA.ExecuteAction() pero quiere asegurarse de que el parámetro que denomina ese método con ClassAParams.RequestedId tiene un valor de 1.

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

el p 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 manera de usar Moq para verificar que la estructura que se transfiere a un método simulado solo tiene ciertas propiedades como un valor específico e ignora el resto?

Respuesta

60

Existe una sobrecarga para mock.Verify que le 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 "Para cualquier ClassAParams pasado como parámetro, verificar RequestId es igual a 12".

+0

¡Funcionó como un amuleto, gracias! – KallDrexx

Cuestiones relacionadas