问题:是否可以清除模拟(或存根)的调用历史?
(并且对于通话记录,我并不是指预期/记录的行为。)
详细信息:
我目前希望使用 NUnit 和 Rhino 模拟根据 AAA 语法编写带有测试的以下代码。
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 部分中的调用集中在 Act 部分中发生的更改上。
但是,此测试中的安排部分包含影响 mockA 调用历史的(必需)操作。
结果断言失败。
我知道我可以使用下面的构造来捕捉呼叫历史记录中的“变化”,但这会降低该测试的预期行为的可读性。
{
...
mockA.AssertWasCalled(x => x.OnFirstDoSomething(), opt => opt.Repeat.Once());
//Act
mockA.DoSomething();
//Assert
mockA.AssertWasCalled(x => x.OnFirstDoSomething(), opt => opt.Repeat.Once());
}
我的问题:是否可以清除模拟的通话记录(未记录的期望)?