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