默认情况下,PHPUnit模拟对象永远不会期望

时间:2012-11-29 11:37:29

标签: mocking phpunit expectations

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

2 个答案:

答案 0 :(得分:11)

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

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

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

$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没有这样的解决方案。

答案 1 :(得分:1)

如果要测试在给定特定参数时从不调用方法,请使用

$mock->expects($this->any())
->method('foo')
->with(new PHPUnit_Framework_Constraint_Not('bar'));