У меня есть обработчик командной шины, который внедряет некоторые службы:
class SomeHandler
{
private $service;
public function __construct(SomeService $service)
{
$this->service = $service;
}
public test(CommandTest $command)
{
$this->service->doSomeStuff();
}
}
В SomeService есть метод doSomeStuff с внешними вызовами, который я не хочу использовать во время тестирования.
class SomeService
{
private $someBindedVariable;
public function __construct($someBindedVariable)
{
$this->someBindedVariable = $someBindedVariable;
}
public function doSomeStuff()
{
//TODO: some stuff
}
}
Тамнаходится в тесте, я пытаюсь заменить службу на фиктивный объект
public function testTest()
{
$someService = $this->getMockBuilder(SomeService::class)->getMock();
$this->getContainer()->set(SomeService::class, $someService);
//TODO: functional test for the route, which uses SomeHandler
}
Первая проблема заключается в том, что этот код вызывает исключение "Служба" App \ Service \ SomeService "является частной, вы не можете заменить ее."
Хорошо, давайте попробуем сделать это общедоступным:
services.yaml:
App\Service\SomeService:
public: true
arguments:
$someBindedVariable: 200
Но это не помогает.Я получаю ответ от родного SomeService.Давайте попробуем с псевдонимами:
some_service:
class: App\Service\SomeService
public: true
arguments:
$someBindedVariable: 200
App\Service\SomeService:
alias: some_service
И снова фиктивный объект не использует тест.Я вижу ответ от собственного SomeService.
Я попытался добавить опцию autowire, но это не помогло.
Что я должен сделать, чтобы заменить SomeService каким-либо фиктивным объектом по всему проекту во время теста