symfony PHPUnit -服务类是私有的,不能替换

5vf7fwbs  于 2023-10-24  发布在  PHP
关注(0)|答案(1)|浏览(140)

在我的PHPUnit测试中,我有一个私有类:

$fakePayStubViewManager = $this->prophesize(PayStubViewManager::class);
$this->client->getContainer()->set(PayStubViewManager::class, $fakePayStubViewManager->reveal());

我得到的错误:
“PayStubsCore\PayStubGeneratorBundle\Manager\PayStubViewManager”服务是私有的,您不能替换它。
prophesize()方法已弃用。
我无法找到一个合适的方法来替换逻辑。我试着用存根,也需要一个reveal()方法的替代品。
有没有人遇到过类似的问题,可以帮助我解决这个问题。谢谢

3vpjnl9f

3vpjnl9f1#

symfony docs声明:
如果您需要测试已删除的私有服务(未被任何其他服务使用的服务),则需要在config/services_test.yaml文件中将这些私有服务声明为public。

  • 来源:https://symfony.com/doc/current/testing.html#retrieving-services-in-the-test*

它们描述的是从容器中删除的服务,因为它们没有被使用。但是同样的道理也适用于你的用例。
默认情况下,所有服务都被认为是私有的,您可以在services_test.yml中将它们全部转换为公共服务,或者只转换单个服务。

相关问题