使私有和删除的服务在测试中可用

Make private and removed service available in tests

我正在尝试 vatin-bundle 与 Symfony 6 兼容。

但是测试失败

The "validator" service or alias has been removed or inlined when the container was compiled. You should either make it public, or stop using the container directly and use dependency injection instead.

这似乎是 Symfony 6

中的新功能

The container in static::getContainer() is actually a special test container. It gives you access to both the public services and the non-removed private services services.

使 validator 再次在测试中可用的首选方法是什么?

我找到的唯一方法是创建自己的别名,例如

services:
    myvalidator:
        alias: validator
        public: true

并使用新别名。有没有更好的方法?

如果删除该服务,则无论如何都无法再访问它。这不是可见性的问题,服务 不再存在 。所以你需要防止服务被删除:创建一个别名是最好和最简单的方法。

维护者已确认here

您可以仅在测试期间创建别名,并仍然访问原始服务。 (例如->get('validator')。创建别名后,不再删除原始服务。

我不认为这在 Symfony 6 中是真正的新东西,但它是 Symfony 4.4 以来的一个东西。尽管现在在 Symfony 6 上确实如此,因为它删除了以前不推荐使用的行为,所以事情可能会发生变化。