我的 Rhino 模拟严格模拟期望异常正在执行方法中捕获.如何解决



我正在使用 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 等)的基本原则,因此在它们传播到测试框架之前捕获这些异常通常是一个问题。

最新更新