如何设置Expect调用以检查在Rhino mock中是否未调用某个方法
本文关键字:调用 mock Rhino 是否 方法 检查 何设置 设置 Expect | 更新日期: 2023-09-27 18:04:09
使用Rhino mock,如何确保在mock对象上设置Expectations时不调用方法?
在我的示例中,我正在测试Commit方法,并且我需要确保在执行提交时不调用Rollback方法。(这是因为我在提交方法中有逻辑,如果提交失败将自动回滚)
代码如下…
[Test]
public void TestCommit_DoesNotRollback()
{
//Arrange
var mockStore = MockRepository.GenerateMock<IStore>();
mockStore.Expect(x => x.Commit());
//here i want to set an expectation that x.Rollback() should not be called.
//Act
subject.Commit();
//Assert
mockStore.VerifyAllExpectation();
}
当然,我可以在Assert阶段这样做:
mockStore.AssertWasNotCalled(x => x.Rollback());
但是我想首先把它设置为一个期望
另一个选项是:
mockStore.Expect(x => x.Rollback()).Repeat.Never();
这是你想要的吗?
ITest test = MockRepository.GenerateMock<ITest>();
test.Expect(x => x.TestMethod()).AssertWasNotCalled(mi => {});
这是另一个选项:
mockStore.Stub(x => x.DoThis()).Repeat.Times(0);
//EXECUTION HERE
x.VerifyAllExpectations();
对于这种情况,我创建了一个扩展方法来更好地显示我的意图
public static IMethodOptions<RhinoMocksExtensions.VoidType> ExpectNever<T>(this T mock, Action<T> action) where T : class
{
return mock.Expect(action).IgnoreArguments().Repeat.Never();
}
注意 IgnoreArguments()调用。我假设你不希望这个方法被调用…无论参数值是什么