0
問題:是否可以清除模擬(或存根)的通話記錄?
(與通話記錄我的意思不是預期的/記錄的行爲。)清除通話記錄的模擬
細節:
我目前想在寫有測試根據使用NUnit和犀牛製品的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());
}
}
爲了便於閱讀,我總是嘗試將調用集中在「動作」部分中發生的更改的「斷言」部分。
但是,此測試中的排列部分包含影響mockA呼叫歷史記錄的(必需的)操作。
因此斷言失敗。
我知道我可以使用下面的構造在通話記錄中找到「更改」,但它會使此測試的預期行爲不易讀。
{
...
mockA.AssertWasCalled(x => x.OnFirstDoSomething(), opt => opt.Repeat.Once());
//Act
mockA.DoSomething();
//Assert
mockA.AssertWasCalled(x => x.OnFirstDoSomething(), opt => opt.Repeat.Once());
}
我的問題:是否有可能清除模擬(不記錄期望)的通話記錄?
不幸的是,這將無法正常工作。我在測試中添加了「MockA」代碼和一些評論以清除預期的行爲。 –
經過幾年的TDD,我決定嘗試另一個模擬框架工具NSubstitute。我注意到的一件事是,我可以通過Rhinomock清除模擬通話記錄。 –