Pregunta

En una prueba de unidad particular, estoy tratando de generar un evento varias veces y luego justificar un valor de propiedad después de que se haya generado el evento final. Tengo algo como

public void TurnRight()
{
   var mockFoo = new Mock<IFoo>();

   SomeService someService= new SomeService ();
   someService.Foo= mockFoo.Object;

   mockFoo.Raise(foo=> foo.TurnedRight += null, EventArgs.Empty);
   mockFoo.Raise(foo=> foo.TurnedRight += null, EventArgs.Empty);
   mockFoo.Raise(foo=> foo.TurnedRight += null, EventArgs.Empty);

   mockFoo.VerifySet(foo=> foo.Orientation = Orientation.West);
}

La orientación en realidad solo cambió a este (ya que creo que el evento solo se eleva una vez) ¿Estoy haciendo algo mal? Esta es la primera vez que uso moq, así que probablemente me falta algo.

Saludos J

editar ... el código correcto que debería haber estado usando

public void TurnRight()
    {
       var mockFoo = new Mock<IFoo>();

       SomeService someService= new SomeService ();
       someService.Foo= mockFoo.Object;

       mockFoo.SetupProperty(foo=> foo.Orientation);

       mockFoo.Raise(foo=> foo.TurnedRight += null, EventArgs.Empty);
       mockFoo.Raise(foo=> foo.TurnedRight += null, EventArgs.Empty);
       mockFoo.Raise(foo=> foo.TurnedRight += null, EventArgs.Empty);

       Assert.AreEqual(mockFoo.Object.Orientation, Orientation.South);
    }
¿Fue útil?

Solución

mockFoo.Raise debería estar bien, elevando el evento tres veces ... ¿Puede poner un punto de interrupción en el controlador de eventos y verificar cuántas veces se llama?

Otro error potencial aquí, como puedo ver, es que primero debe decirle a Moq que comience a rastrear todos los conjuntos / obtenciones de una propiedad antes de poder verificarla (y antes de generar los eventos):

// start "tracking" sets/gets to this property
mockFoo.SetupProperty(foo=> foo.Orientation);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top