【发布时间】:2013-09-30 20:34:21
【问题描述】:
我一直在尝试使用 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();
测试通过。
为什么会这样,我将如何为我想要测试的内容编写测试?
【问题讨论】:
-
您的示例缺少
Client和Controller的类定义。 Stackoverflow 要求您证明一个自包含的示例,如果您不提供这些定义,我们只能说缺少的定义不会调用该方法。
标签: php unit-testing phpunit mockery