2009-12-01 19 views
7

In un particolare test di unità sto provando a generare un evento più volte e quindi a rendere più preciso un valore di proprietà dopo che l'evento finale è stato generato. Ho qualcosa di simileMoq'ing il sollevamento di eventi più volte

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

Orientamento effettivamente cambiato solo est (come credo l'evento sta ottenendo soltanto sollevato una volta). Sto facendo qualcosa di sbagliato? Questa è la prima volta che ho usato moq quindi probabilmente mi manchi qualcosa.

Acclamazioni J

edit ... il codice corretto dovrei Sono stato con

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

risposta

5

mockFoo.Raise dovrebbe andare bene, alzando l'evento tre volte ... Si può mettere un punto di interruzione nel gestore dell'evento e controllare quante volte si chiama?

Un altro potenziale errore qui posso vedere, è che si deve prima dire Moq per iniziare a monitorare tutti gli insiemi/gets di una proprietà prima di poter verificare (e prima di sollevare gli eventi):

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