8

如果没有正式定义的期望,有没有办法告诉 phpunit 模拟对象永远不要期望方法调用?

4

2 回答 2

15

在我看来,永远不要期望每种方法都没有想法。所以 phpunit 没有任何功能。只有当您想完全确保某些方法不会被调用时,才能使用“从不”期望。

无论如何,您可以使用一些匹配器来接近您的目标。例子:

永远不要期望所有对象的方法(如果将调用任何模拟方法,则失败):

$mock->expects($this->never())
    ->method($this->anything());

因此,例如,您可以测试某些对象不会调用除测试对象之外的任何方法:

$mock = $this->getMock('Some\Tested\Class', array('testedMethod'));
$mock->expects($this->never())
    ->method($this->anything());

您也可以尝试使用另一个匹配器,例如。matchesRegularExpression

$mock->expects($this->never())
    ->method($this->matchesRegularExpression('/get.*/'));

例如,如果调用任何 getter,上述示例将失败。

我知道这不是您想要的,但恐怕 phpunit 没有这样的解决方案。

于 2012-11-30T09:51:50.103 回答
1

如果您想测试在给出特定参数时永远不会调用方法,请使用

$mock->expects($this->any())
->method('foo')
->with(new PHPUnit_Framework_Constraint_Not('bar'));
于 2013-08-01T15:17:21.123 回答