我的 Rhino 模拟 Strict Mock 期望异常在执行方法中被捕获。怎么解决?

My Rhino mocks Strict Mock expectation exceptions are being caught in the executing method. How to solve?

我正在使用 Rhino Mocks 来设置严格的模拟。在某些情况下,不能对这些模拟中的任何一个执行任何方法调用。

// Arrange
var myMock = MockRepository.GenerateStrictMock<IMyClass>();
var sut = new SUT(myMock);

// Act
sut.DoSomething();

现在,DoSomething 将所有内容包装在一个 try-catch 中:

public void DoSomething()
{
    try {
        m_Class.Something();
    }
    catch {
    }
}

这导致严格模拟的期望异常被捕获。我的测试通过了,但它不应该通过。

我希望调用 myMock.VerifyAllExpectations(); 会导致测试失败,但事实并非如此。

我怎样才能达到这个结果?

拥有一个捕获异常的 catch 块通常是一种不好的做法。但是,如果您无法更改它,则可以使用 .AssertWasCalled().AssertWasNotCalled() 对成员执行更明确的断言,如下所示:

myMock.AssertWasNotCalled(x => x.Something())

但是,如果您想验证没有调用任何接口,则需要为每个可能的接口成员设置一个断言,这将是乏味的,并且容易遗漏未来的成员。

不幸的是,对断言使用异常是 RhinoMocks(以及大多数单元测试框架,如 NUnit、Moq、NSubstitute 等)的基本原则,因此在它们传播到测试框架之前捕获这些异常将是一个问题一般。