2009-12-01 1 views
7

Dans un test unitaire particulier, j'essaie d'élever un événement plusieurs fois, puis d'intensifier une valeur de propriété après que l'événement final a été déclenché. J'ai quelque chose commeMoq'ing la levée d'événements plusieurs fois

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

Orientation fait seulement changé à l'est (comme je crois que l'événement ne se leva une fois). Est-ce que je fais quelque chose de mal? C'est la première fois que j'ai utilisé moq, donc il me manque probablement quelque chose.

Vive J

modifier ... le bon code j'aurais utilise

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

Répondre

5

mockFoo.Raise devrait être bien, l'événement est trois fois ... Pouvez-vous mettre un point d'arrêt dans le gestionnaire d'événements et vérifier combien de fois est-il appelé?

Une autre erreur possible ici que je peux voir, est que vous devez d'abord dire Moq pour commencer le suivi de tous les ensembles/gets d'une propriété avant de pouvoir le vérifier (et avant que vous soulevez les événements):

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