2013-07-02 1 views
0

вопрос: можно ли очистить историю звонков макета (или заглушки)?
(и истории вызовов, я не имею в виду ожидаемого/записанное поведение.)Удалить историю звонков макета

Детали:
Сейчас я хочу пишу следующий код с испытания в соответствии с синтаксисом AAA использованием NUnit и Rhino издевается.

public abstract class MockA 
{ 
    private bool _firstTime = true; 

    public void DoSomething() 
    { 
     if (_firstTime) 
     { 
      OnFirstDoSomething(); 
      _firstTime = false; 
     } 
    } 

    public abstract void OnFirstDoSomething(); 
} 

[TestFixture] 
public class MockATest 
{ 
    [Test] 
    public void DoSomethingShouldSkipInitializationForSequentialCalls() 
    { 
     // Arrange 
     var mockA = MockRepository.GeneratePartialMock<MockA>(); 
     mockA.Expect(x => x.OnFirstDoSomething()).Repeat.Any(); 
     mockA.DoSomething(); // -> OnFirstDoSomething() is called 
     // here I want clear the call history of mockA 

     //Act 
     mockA.DoSomething(); // -> OnFirstDoSomething should NOT be called 
     mockA.DoSomething(); // -> OnFirstDoSomething should NOT be called 

     //assert 
     mockA.AssertWasNotCalled(x => x.OnFirstDoSomething()); 
    } 
} 

Для удобства чтения я всегда стараюсь сосредоточиться на звонки в разделе Assert об изменениях, которые происходят в разделе Закона.
Однако раздел аранжировки в этом тесте содержит (требуемое) действие, влияющее на историю вызовов mockA.
В результате утверждение не выполняется.

Известно, что я мог поймать «изменение» в истории вызовов, используя приведенную ниже конструкцию, но это делает ожидаемое поведение этого теста менее удобочитаемым.

{ 
    ... 
    mockA.AssertWasCalled(x => x.OnFirstDoSomething(), opt => opt.Repeat.Once()); 
    //Act 
    mockA.DoSomething(); 
    //Assert 
    mockA.AssertWasCalled(x => x.OnFirstDoSomething(), opt => opt.Repeat.Once()); 
} 

Мой вопрос: можно очистить историю вызовов макета (не учтенное ожидания)?

ответ

0

Вам не нужно очищать историю звонков. Используйте метод Stub вместо Expect в разделе Arrange:

[Test] 
public void DoSomethingShouldSkipInitializationForSequentialCalls() 
{ 
    // Arrange 
    var mockA = MockRepository.GeneratePartialMock<MockA>(); 

    // this is what you have to change 
    mockA.Stub(x => x.OnFirstDoSomething()).Repeat.Any(); 
    mockA.DoSomething(); // -> OnFirstDoSomething() is called 
    // here I want clear the call history of mockA 

    //Act 
    mockA.DoSomething(); 
    mockA.DoSomething(); 

    //assert 
    mockA.AssertWasNotCalled(x => x.OnFirstDoSomething()); 
} 
+0

К сожалению, это не сработает. Я добавил код «MockA» и некоторые комментарии в тесте, чтобы очистить ожидаемое поведение. –

+0

После нескольких лет TDD я решил опробовать еще один макет NSubstitute Framewerk. Одна из вещей, которую я заметил, - это то, что история звонков с макетами может быть очищена, я хочу с Rhinomock. –