2009-12-01 3 views
7

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

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

ответ

5

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

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

// start "tracking" sets/gets to this property 
mockFoo.SetupProperty(foo=> foo.Orientation); 
Смежные вопросы