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);
    }
Foi útil?

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top