2010-02-01 21 views
6

tengo un método privado que debe devolver true.I m usando Nunit y MOQ así que tengo la siguiente manera:¿Cómo puedo afirmar/verificar un método protegido de Moq?

[TestFixture] 
public class CustomerTestFixture 
{ 
    var customerMock=new Mock<ICustomer>() 
    customerMock.Protected().Setup<bool>("CanTestPrivateMethod").Returns(true); 

    // How do I assert it now since I cannot do 
    customerMock.Verify //Verify does not exists. 
} 

No se pudo encontrar nada en google que le indica cómo probarlo. como puedes ver Puedo hacer una configuración pero no puedo afirmar.

¿Me está faltando lo obvio? Muchas gracias.

Respuesta

3

No desea probar un método en una simulación. Desea probar el método en una instancia de la clase real. El camino al test a private method en una clase es usar un descriptor de acceso. Tenga en cuenta que VS se los proporcionará de forma automática, o puede "hacer los suyos" utilizando la reflexión. Para un método interno, también puede configurar InternalsVisibleTo para su proyecto de prueba en el archivo AssemblyInfo.cs.

[TextFixture] 
public class CustomerTestFixture 
{ 
    var customer = new Customer(); 
    var accessor = new Customer_Accessor(new PrivateObject(customer)); 

    Assert.IsTrue(accessor.CanTestPrivateMethod()); 

} 

Cuando se burlan de un objeto, la intención es que ese objeto está siendo utilizado como una dependencia de la clase real que se está probando. Por lo tanto, es suficiente para poder configurar el objeto simulado para devolver valores específicos. Estás haciendo tus afirmaciones en la clase que usa la dependencia, no en la clase simulada. El paso de verificación asegura que su clase bajo prueba llamó a los métodos en los objetos simulados de acuerdo con las expectativas que ha establecido.

+0

Gracias por su respuesta. Quiero que mi maqueta objeto.CanTestPrivateMethod para devolver valores específicos. Así que si codigo "return true" en mi método privado. ¿Todavía puedo afirmar eso? En mi opinión, no debería probar un método privado en absoluto, pero mi colega insiste en este. Así que estoy tratando de averiguar cómo hacerlo usando MOQ. – user9969

+1

Te estás perdiendo mi punto. No se burle del objeto bajo prueba. Solo fingir sus dependencias. Cree una instancia real, configure las condiciones para que el método privado devuelva un valor específico, luego use el acceso para verificar que el método, de hecho, devuelva ese valor. La única necesidad de burlarse sería si la instancia tuviera algunas dependencias que usarías dentro de tu método privado. – tvanfosson

+0

Gracias por su tiempo y respuesta. Tengo el punto ahora. – user9969

Cuestiones relacionadas