如何设置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());

但是我想首先把它设置为一个期望

如何设置Expect调用以检查在Rhino mock中是否未调用某个方法

另一个选项是:

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()调用。我假设你不希望这个方法被调用…无论参数值是什么