当抛出异常时,我一直在尝试使用 Mockery 断言从另一个方法中调用一个方法。举个例子:
public function testOtherMethodIsCalled() {
$client = m::mock('Client');
$client
->shouldReceive('getFoo')
->andThrow(new FooNotAvailableException);
$controller = m::mock('Controller[otherMethod]');
$controller
->shouldReceive('otherMethod')
->once();
$controller->setClient($client);
$controller->firstMethod();
}
显然,名称已被简化,但这与我所拥有的所有其他方式相同。在代码中,当FooNotAvailableException
被捕获时,我将调用返回给otherMethod()
.
问题是当运行它时,我得到这个错误:
Mockery\CountValidator\Exception:Controller 中的方法 otherMethod() 应该准确调用 1 次,但调用 0 次。
那是因为在内部otherMethod()
调用了原始的、未模拟的。如果我要从测试中调用它,如下所示:
$controller->otherMethod();
测试通过。
为什么会这样,我将如何为我想要测试的内容编写测试?