質問: モック (またはスタブ) の呼び出し履歴をクリアすることは可能ですか?
(通話履歴とは、予想される/記録された動作を意味するものではありません。)
詳細:
現在、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 セクション内で発生する変更に焦点を当てるようにしています。
ただし、このテストの Arrange セクションには、mockA の呼び出し履歴に影響を与える (必須の) アクションが含まれています。
その結果、アサートは失敗します。
以下の構成を使用して呼び出し履歴の「変更」をキャッチできることはわかっていましたが、このテストの予想される動作が読みにくくなります。
{
...
mockA.AssertWasCalled(x => x.OnFirstDoSomething(), opt => opt.Repeat.Once());
//Act
mockA.DoSomething();
//Assert
mockA.AssertWasCalled(x => x.OnFirstDoSomething(), opt => opt.Repeat.Once());
}
私の質問: モックの通話履歴をクリアすることは可能ですか (Expectations は記録されません)?