Очистить историю вызовов макета

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

Детали:
В настоящее время я хочу написать следующий код с тестами в соответствии с синтаксисом 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());
    }
}

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

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

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

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

1 ответ

Вам не нужно очищать историю звонков. Используйте метод 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());
}
Другие вопросы по тегам