Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHPUnit测试多个对象的交互_Php_Unit Testing_Phpunit - Fatal编程技术网

PHPUnit测试多个对象的交互

PHPUnit测试多个对象的交互,php,unit-testing,phpunit,Php,Unit Testing,Phpunit,我有以下代码,我希望确保始终以正确的顺序调用这些代码: 类进程管理器{ //经去离子注入 受保护的$service1; 受保护的$service2; 受保护的$服务3; 公共功能运行(){ $service1->execute(); $service2->execute(); $service3->execute(); } } 我在考虑模拟所有的服务,并使用$this->at(),但这似乎只适用于来自同一对象的多个函数。你知道如何断言不同对象的不同函数是按顺序调用的吗?使用mockry创建mo

我有以下代码,我希望确保始终以正确的顺序调用这些代码:

类进程管理器{
//经去离子注入
受保护的$service1;
受保护的$service2;
受保护的$服务3;
公共功能运行(){
$service1->execute();
$service2->execute();
$service3->execute();
}
}

我在考虑模拟所有的服务,并使用
$this->at()
,但这似乎只适用于来自同一对象的多个函数。你知道如何断言不同对象的不同函数是按顺序调用的吗?

使用mockry创建mock,因为它支持在不同mock中按顺序调用的期望。诀窍是“globally()”方法:

这一切都在会议上得到了解释


如果不想使用mockry,可以使用naive mock(扩展原始类的真实类)并实现某种手动调用顺序检查(然后在需要时调用parent::method)。

看起来不错,但我希望有一个本机phpunit解决方案。我不太热衷于在我的项目中包含更多的依赖项。我已经添加了另一种可能的方法来实现这一点,而不需要任何模拟库。无论如何,“不更多依赖项”子句不在问题中,因此。。。
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();