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