我必须测试一些使用在执行期间从容器中获取的服务的命令。
可以让Command在测试执行期间使用不同的服务吗?
PS:覆盖config_test.yml中的服务定义不是一个选项,因为它会导致应用程序的基本流程中断。
答案 0 :(得分:0)
symfony使用的依赖注入容器公开了一个set
方法,可用于更改容器返回的服务:
$container->set('my.service.id', new InjectedService);
如果在测试环境中执行此操作,则可以更改用于每个测试的类。
set方法的签名如下所示:
/**
* Sets a service.
*
* @param string $id The service identifier
* @param object $service The service instance
* @param string $scope The scope of the service
*
* @api
*/
public function set($id, $service, $scope = self::SCOPE_CONTAINER);
查看Symfony\Component\DependencyInjection\ContainerInterface
,了解其工作原理。