【发布时间】:2013-04-26 07:26:22
【问题描述】:
我必须测试一些在执行期间使用从容器中获取的服务的命令。
是否可以让Command在测试执行时使用不同的服务?
PS:重写 config_test.yml 中的服务定义不是一种选择,因为它会导致应用程序的基本流程中断。
【问题讨论】:
-
我忘了说我是在 Symfony2 中开发的。
我必须测试一些在执行期间使用从容器中获取的服务的命令。
是否可以让Command在测试执行时使用不同的服务?
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 以了解其工作原理的详细信息。
【讨论】: