2009-12-01 20 views
7

En una prueba de unidad particular, estoy tratando de plantear un evento varias veces y luego de modificar el valor de una propiedad después de que se haya producido el evento final. Tengo algo así comoMoq'ing la elevación de eventos varias veces

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); 
} 

Orientación realidad sólo cambió a este (como creo que el evento sólo se está levantado una vez). ¿Estoy haciendo algo mal? Esta es la primera vez que uso moq, así que probablemente me esté perdiendo algo.

Saludos J

editar el código correcto ... yo 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); 
    } 

Respuesta

5

mockFoo.Raise debe estar bien, provocar el evento tres veces ... ¿Se puede poner un punto de interrupción en el controlador de eventos y comprobar cuántas veces se llama?

Otro posible error aquí que puedo ver, es que primero debe decirle Moq a iniciar el seguimiento de todos los sistemas/recupera de una propiedad antes de poder verificarlo (y antes de elevar los eventos):

// start "tracking" sets/gets to this property 
mockFoo.SetupProperty(foo=> foo.Orientation); 
Cuestiones relacionadas