php - 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);
仅用于测试,我该如何解决这个问题?
谢谢
解决方案
从 Symfony 3.3 开始不推荐使用替换。您应该尝试使用别名,而不是替换服务。 http://symfony.com/doc/current/service_container/alias_private.html
此外,您可以尝试这种方法:
$this->container->getDefinition('user.user_service')->setSynthetic(true);
在做之前$container->set()
推荐阅读
- xamarin - 托管 Xamarin HttpClient 实现是否支持 TLS 1.2?
- java - 编码bat字符串theEnd
- r - R:用列表填充空矩阵并保留行名和列名
- git - Gitlab:仅在创建和更新时触发合并请求的 CI Webhook
- mysql - 用更高的日期替换主日期 if, sql, mysql
- php - Wordpress 强制 HTTPS,123-reg 导致问题
- swift - 代码重构 - Swift
- python - 扩展 Selenium 以处理装载元件的机器人框架
- ruby-on-rails - Rails/GraphQL 中的关联类型不匹配?
- javascript - 在 mouseenter 上加载视频