我有以下代码,我想确保始终以正确的顺序调用:
class ProcessManager {
// injected via DI
protected $service1;
protected $service2;
protected $service3;
public function run() {
$service1->execute();
$service2->execute();
$service3->execute();
}
}
我正在考虑嘲笑所有服务并使用$this->at()
,但这似乎只有来自同一个对象的多个函数才有效。任何想法如何断言不同对象的不同函数按顺序调用?
答案 0 :(得分:0)
使用Mockery创建模拟,因为它支持应该在不同的模拟中按顺序调用的期望。诀窍是"全球()"方法:
use \Mockery as m;
....
// create the mocks that will be injected:
$service1 = m::mock('Service1Class')
->shouldReceive('execute')
->once()
->globally()
->ordered()
->getMock();
$service2 = m::mock('Service2Class')
->shouldReceive('execute')
->once()
->globally()
->ordered()
->getMock();
解释了这一点
如果您不想使用Mockery,您可以使用天真的Mocks(扩展原始类的真实类)并实现某种手动调用顺序检查(然后根据需要调用parent ::方法)。