PHPUnit Тестирование взаимодействий нескольких объектов

У меня есть следующий код, который я хочу, чтобы всегда вызывался в правильном порядке:

class ProcessManager {
// injected via DI
protected $service1;
protected $service2;
protected $service3;

public function run() {
$service1->execute();
$service2->execute();
$service3->execute();
}
}

Я думал о том, чтобы вычеркнуть все услуги и использовать $this->at(), но это, кажется, работает, только если это несколько функций из одного объекта. Есть идеи, как утверждать, что разные функции из разных объектов вызываются по порядку?

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 :: method, если требуется).

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector