【发布时间】:2011-10-14 19:43:55
【问题描述】:
我如何验证在我的测试的“行为”部分中调用了一个模拟,而忽略了在测试的“排列”部分中对模拟的任何调用。
[Test]
public void ShouldOpenThrottleWhenDrivingHome()
{
var engineMock = MockRepository.GenerateStub<IEngine>();
var car = new Car(engineMock);
car.DriveToGroceryStore(); // this will call engine.OpenThrottle
car.DriveHome();
engine.AssertWasCalled(e => e.OpenThrottle());
}
我不希望尝试注入新的模拟或依赖 .Repeat(),因为测试必须知道该方法在设置中被调用了多少次。
【问题讨论】:
-
这个已经被问过了:stackoverflow.com/questions/770013/…
-
我再次阅读了这个问题 - 它可能不是重复的,但我不确定问题到底是什么。 ClearStub() 应该做什么?存根在哪里初始化?
-
是的,这不是重复。我已经编辑了这个问题,希望它更清楚。
-
谢谢,现在清楚多了……
-
Aww...所有这些答案都需要使用专家/验证。希望有一个纯粹的 AAA 方式来做到这一点。我实际上希望能够使用 .Repeat()... 除了在特定点重置呼叫(就在我的行动之前)。我使用构造函数注入,所以给我的 SUT 一个新的模拟是行不通的。
标签: unit-testing mocking rhino-mocks