Symfony 对外部API的模拟调用
今天,我试图将我的项目升级到新版本的Symfony(3.3),但我的mock遇到了一个问题 直到今天,我一直在做这样的模拟:Symfony 对外部API的模拟调用,symfony,mocking,phpunit,deprecated,symfony-3.3,Symfony,Mocking,Phpunit,Deprecated,Symfony 3.3,今天,我试图将我的项目升级到新版本的Symfony(3.3),但我的mock遇到了一个问题 直到今天,我一直在做这样的模拟: $client = $this->makeClient(); $mockObject = new \stdClass(); $mock = $this->getMockBuilder('SomeClass') ->disableOriginalConstructor() ->setMetho
$client = $this->makeClient();
$mockObject = new \stdClass();
$mock = $this->getMockBuilder('SomeClass')
->disableOriginalConstructor()
->setMethods(['method1', 'method2'])
->getMock();
$mock->expects($this->once())
->method('method1')
->will($this->returnValue($mockObject));
$client->getContainer()->set('my_service', $mock);
$client->getContainer()->stub('my_service', $myServiceStub);
在这里,method1
只是一篇口头禅,没有别的
现在,我得到以下错误:
自Symfony 3.3以来,已不推荐设置“my_service”预定义服务,Symfony 4.0:1x不再支持该服务
经过一些研究,我似乎无法使用代码的最后一行。
问题是,我看不到也找不到任何解决方案来解决这个问题。您的问题也在讨论中 你可以看看: 请注意,当移动到3.3时,您不需要修复这些弃用。 但是,当移动到4.0时,您将看到 以及: 那么,您可以将这些测试标记为
@legacy
,以避免它们失败
如果需要迁移测试,则暂时为您提供迁移测试的时间
时间这就是反对意见的要点:您可以迁移
逐步地(我也更喜欢尽可能快地删除不推荐)
可能,但对其中一些人来说,可能需要更多的时间)
解决你问题的方法很少 TestDoubleBundle 使创建双重测试更容易。您可以使用依赖项注入标记自动用存根或伪存根替换服务 覆盖容器 另一种方法是在测试环境中扩展容器,以便允许存根。以下是想法的草稿:
谢谢您的回复。我看过这个讨论,我也以同样的方式看待我的项目。另外,我不希望我的测试成为遗留问题,它必须工作。讨论中没有真正的解决方案,只有“这是正常的”、“遗留的”、“现在不需要”…我已经尝试了第二种方法(我得到的唯一一种),我在测试中必须进行的第二次模拟中出现了一个SEGFULT。有什么想法吗?我刚刚在新安装的Symfony上测试了它,它按预期工作。必须是你在项目中做的特定事情。