当我编写测试时,即按特定顺序测试几个模拟调用时,我也想确保调用所有准备好的函数调用。我正在使用InvokedAtIndex
匹配器,但是例如测试用例中的代码传递:
$mock = $this->getMock('Service', 'SomeClass');
$mock->expects($this->at(0))->method('getSomeValue');
$mock->expects($this->at(1))->method('getSomeOtherValue');
$mock->getSomeValue();
是否有一些解决方案如何实现此测试失败,因为并未调用所有准备好的模拟方法?
谢谢
答案 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
,否则上述测试将失败。