2014-10-01 2 views
0

У меня есть класс, как это:Сброс Rhino Mocks AssertWasNotCalled

public class MyClass 
{ 
    private MyStruct _someProperty; 
    public MyStruct SomeProperty 
    { 
     set 
     { 
      if(StructureChanged(_someProperty, value)) 
      { 
       _someProperty = value; 
       OnSomePropertyChanged(); 
      } 
     } 
    } 

    private bool StructureChanged(MyStruct oldValue, MyStruct newValue) 
    { 
     // Check if any property of newValue is different from oldValue 
     // This is a check for semantic equality, not referential equality 
    } 

    internal protected virtual OnSomePropertyChanged() 
    { 
     // ... 
    } 
} 

И тест, как это:

// Arrange 
_myClass = MockRepository.GeneratePartialMock<MyClass>(); 
_myClass.SomeProperty = new MyStruct(); 

// Act 
_myClass.SomeProperty = new MyStruct(); // This is semantically equal to the current value 

// Assert 
_myClass.AssertWasNotCalled(m => m.OnSomePropertyChanged()); 

Конечно, тест не потому, что OnSomePropertyChanged вызывается, когда я установить свойство в первый раз. Я хочу установить свойство в первый раз, как-то сбросить значение AssertWasNotCalled, а затем снова установить свойство и убедиться, что OnSomePropertyChanged не вызывается снова. Есть какой-либо способ сделать это?

ответ

1

Собственно, в этом случае ожидается, что OnSomePropertyChanged() вызывается один раз. Но не больше и не меньше одного раза.

Подходящее заявление утверждают, то может выглядеть следующим образом:

_myClass.AssertWasCalled(m => m.OnSomePropertyChanged(), opt => opt.Repeat.Once()); 

PS

Еще одно испытание должно быть написано, что обеспечивает OnSomePropertyCnahged() срабатывает после SomeProperty фактически изменилось.

В этом случае в нашем тесте гарантируется OnSomePropertyCnahged(), когда SomeProperty был изменен в первый раз.
И ожидание вызывается один раз, но не два раза, гарантирует, что событие не будет запущено, если этого не ожидается.

+0

Но откуда узнать, было ли это вызвано, когда SomeProperty был установлен в первый раз или во второй раз? – ConditionRacer

+0

Я обновил свой ответ с объяснением, как это можно гарантировать –

Смежные вопросы