Moq'ing поднятие событий несколько раз - PullRequest
7 голосов
/ 01 декабря 2009

В конкретном модульном тесте я пытаюсь вызвать событие несколько раз, а затем изменить значение свойства после того, как последнее событие было вызвано. У меня есть что-то вроде

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

Ориентация фактически изменилась только на восток (как я полагаю, событие поднимается только один раз). Я делаю что-то неправильно? Это первый раз, когда я использовал moq, поэтому я, вероятно, что-то упустил.

Приветствие J

редактировать ... правильный код, который я должен был использовать

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

1 Ответ

5 голосов
/ 01 декабря 2009

mockFoo.Raise должно быть в порядке, вызывая событие три раза ... Можете ли вы установить точку останова в обработчике событий и проверить, сколько раз она вызывается?

Другая потенциальная ошибка, как я вижу, состоит в том, что вы должны сначала попросить Moq начать отслеживать все наборы / получения свойства, прежде чем вы сможете проверить его (и перед тем, как вызывать события):

// start "tracking" sets/gets to this property
mockFoo.SetupProperty(foo=> foo.Orientation);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...