Moq'ing la levée des événements plusieurs fois
-
22-07-2019 - |
Question
Dans un test unitaire particulier, j'essaie de générer un événement plusieurs fois, puis de spécifier une valeur de propriété après la création de l'événement final. J'ai quelque chose comme
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);
}
L’orientation n’a en fait changé que vers l’est (car j’estime que l’événement n’est soulevé qu’une fois) Est-ce que je fais quelque chose de mal? C’est la première fois que j’utilise Moq, alors il me manque probablement quelque chose.
A bientôt J
modifier ... le code correct que j'aurais dû utiliser
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);
}
La solution
mockFoo.Raise
devrait être correct, il soulève l'événement trois fois ... Pouvez-vous mettre un point d'arrêt dans le gestionnaire d'événements et vérifier combien de fois il est appelé?
Comme je peux le constater, une autre erreur potentielle est que vous devez d'abord dire à Moq de commencer à suivre tous les ensembles / toutes les propriétés d'une propriété avant de pouvoir la vérifier (et avant de déclencher les événements):
// start "tracking" sets/gets to this property
mockFoo.SetupProperty(foo=> foo.Orientation);