Moq'ing a captação de eventos várias vezes
-
22-07-2019 - |
Pergunta
Em um determinado teste de unidade Eu estou tentando elevar um evento várias vezes e depois para veryify um valor de propriedade após o evento final foi levantada. Eu tenho algo parecido
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);
}
Orientação realmente só mudou para o leste (como eu acredito que o evento está ficando apenas levantou uma vez). Estou fazendo algo errado? Esta é a primeira vez que eu usei moq assim que eu sou provavelmente faltando alguma coisa.
Felicidades J
editar ... o código correto i deveria ter sido 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);
}
Solução
mockFoo.Raise
deve ser fino, aumentando o evento três vezes ... você pode colocar um ponto de interrupção no manipulador de eventos e verificar quantas vezes é que se chama?
Outro erro potencial aqui como eu posso ver, é que você deve primeiro dizer Moq para começar a controlar todos os sets / recebe de uma propriedade antes que você pode verificá-lo (e antes de levantar os eventos):
// start "tracking" sets/gets to this property
mockFoo.SetupProperty(foo=> foo.Orientation);