1

当我编写一个测试时,即按特定顺序测试几个模拟调用时,我还想确定所有准备好的函数调用都被调用了。我正在使用InvokedAtIndex匹配器,但例如测试用例中的这段代码通过:

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

$mock->getSomeValue();

是否有一些解决方案如何使该测试失败,因为并非所有准备好的模拟方法都被调用?

谢谢

4

1 回答 1

1

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

如果你想检查是否在第一次getSomeValue调用方法,而在第二次getSomeOtherValue你需要涉及另一个InvocationMocker- 例如with

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

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

$mock->getSomeValue();

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

于 2012-10-23T15:52:14.927 回答