PHPUnit中的InvokedAtIndex匹配器未验证是否到达上次准备好的索引

时间:2012-10-23 08:54:16

标签: php phpunit

当我编写测试时,即按特定顺序测试几个模拟调用时,我也想确保调用所有准备好的函数调用。我正在使用InvokedAtIndex匹配器,但是例如测试用例中的代码传递:

$mock = $this->getMock('Service', 'SomeClass');
$mock->expects($this->at(0))->method('getSomeValue');
$mock->expects($this->at(1))->method('getSomeOtherValue');

$mock->getSomeValue();

是否有一些解决方案如何实现此测试失败,因为并未调用所有准备好的模拟方法?

谢谢

1 个答案:

答案 0 :(得分:1)

问题在于,在您的示例中MethodName匹配器不会抛出异常,而是只返回false。这意味着序列发生器只能使用适当的方法正常工作(例如,如果您将从示例模拟中创建存根),但它不会使期望失败。

如果您想检查第一次getSomeValue方法是否被调用,而第二次getSomeOtherValue方法需要检查另一个InvocationMocker - 例如with。< / p>

所以,这应该适合你(假设两种方法都没有参数):

(...)
$mock->expects($this->at(0))->method('getSomeValue')->with();
$mock->expects($this->at(1))->method('getSomeOtherValue')->with();

$mock->getSomeValue();

除非您在第二次调用时调用getSomeOtherValue,否则上述测试将失败。