我必须测试一些使用在执行期间从容器中获取的服务的命令。
是否可以让命令在测试执行期间使用不同的服务?
PS:覆盖 config_test.yml 中的服务定义不是一个选项,因为它会导致应用程序的基本流程中断。
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
它,看看它是如何工作的。