在测试执行期间修改要在Container中使用的服务

时间:2013-04-26 07:26:23

标签: php symfony phpunit

我必须测试一些使用在执行期间从容器中获取的服务的命令。

可以让Command在测试执行期间使用不同的服务吗?

PS:覆盖config_test.yml中的服务定义不是一个选项,因为它会导致应用程序的基本流程中断。

1 个答案:

答案 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,了解其工作原理。