У меня есть следующий код, который я хочу, чтобы всегда вызывался в правильном порядке:
class ProcessManager {
// injected via DI
protected $service1;
protected $service2;
protected $service3;
public function run() {
$service1->execute();
$service2->execute();
$service3->execute();
}
}
Я думал о том, чтобы вычеркнуть все услуги и использовать $this->at()
, но это, кажется, работает, только если это несколько функций из одного объекта. Есть идеи, как утверждать, что разные функции из разных объектов вызываются по порядку?
Создайте макеты, используя 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 :: method, если требуется).
Других решений пока нет …