considerar esta clase:Moq - Cómo verificar que un valor de la propiedad se establece a través de la incubadora
public class Content
{
public virtual bool IsCheckedOut {get; private set;}
public virtual void CheckOut()
{
IsCheckedOut = true;
}
public virtual void CheckIn()
{
//Do Nothing for now as demonstrating false positive test.
}
}
El método El registro es intencionalmente vacía. Ahora tengo algunos métodos de prueba para verificar el estado de llamar a cada método.
[TestMethod]
public void CheckOutSetsCheckedOutStatusToTrue()
{
Content c = new Content();
c.CheckOut();
Assert.AreEqual(true, c.IsCheckedOut); //Test works as expected
}
[TestMethod]
public void CheckInSetsCheckedOutStatusToFalse()
{
Content c = new Content();
c.CheckIn();
Assert.AreEqual(false, c.IsCheckedOut); //Test does not work as expected
}
La segunda prueba pasa por los motivos equivocados. Entonces, ¿cómo puedo usar burla (moq) para verificar que CheckIn establezca la propiedad IsCheckedOut?
Gracias.
EDITAR
Para aclarar: Tengo un método llamado Check In() cuyo trabajo es para establecer el estado IsCheckedOut a falso.
Verás en mi código de prueba anterior que la prueba arrojará falso aunque no establezca el valor de la propiedad en falso; Esto es esperado, nada está mal aquí.
Creo que mi pregunta es específicamente ¿Cómo puedo verificar que el método CheckIn() haya establecido la propiedad IsCheckedOut en false? Esto es lo que yo llamaría verificación de comportamiento.
Creo que algunos de los comentarios sugirieron hacer algo que equivale a la verificación del estado? Si por lo que no creo que haya ningún valor en burlarse de esta parte del todo cuando simplemente puede utilizar:
Content c = new Content();
c.CheckIn();
Assert.AreEqual(false, c.IsCheckedOut); //State verification
Por supuesto puedo estar equivocado, así que por favor, ayúdame a aclarar estos conceptos :)
Realmente depende del propósito de la propiedad IsChecked out: si es un comportamiento del objeto que después de que algo se haya registrado y desprotegido es falso, entonces lo que tienes arriba está bien. Si la propiedad es una ventana hacia su clase para verificar un comportamiento mayor, eso sería lo que yo llamaría verificación de estado. Entonces ... depende de la intención realmente. – FinnNk
Esto pareció resolver el problema: http://stackoverflow.com/questions/2853313/moq-how-to-correctly-mock-set-only-properties –
no responde a la pregunta directamente, pero necesario para comprobar que una propiedad se estableció explícitamente como verdadera: 'mock.SetupProperty (foo => foo.SomeProperty);/* ejecutar acciones de prueba * /; mock.VerifySet (foo => foo.SomeProperty = It.IsAny(), "SomeProperty debería haberse configurado"); Assert.True (mock.Object.SomeProperty, "SomeProperty debería haberse establecido en verdadero"); ' –