首页 > 解决方案 > Symfony 4:覆盖容器中的公共服务

问题描述

我正在将我们的项目迁移到 Symfony 4。在我的测试套件中,我们使用 PHPUnit 进行功能测试(我的意思是,我们调用端点并检查结果)。通常,我们模拟服务以检查不同的步骤。

自从我迁移到 Symfony 4 后,我遇到了这个问题:Symfony\Component\DependencyInjection\Exception\InvalidArgumentException: The "my.service" service is already initialized, you cannot replace it. 当我们像这样重新定义它时:static::$container->set("my.service", $mock);

仅用于测试,我该如何解决这个问题?

谢谢

标签: phpsymfonysymfony4

解决方案


从 Symfony 3.3 开始不推荐使用替换。您应该尝试使用别名,而不是替换服务。 http://symfony.com/doc/current/service_container/alias_private.html

此外,您可以尝试这种方法:

$this->container->getDefinition('user.user_service')->setSynthetic(true); 在做之前$container->set()

在 php 7.2 的测试中替换 Symfony 服务


推荐阅读