Symfony 对外部API的模拟调用

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

今天,我试图将我的项目升级到新版本的Symfony(3.3),但我的mock遇到了一个问题

直到今天,我一直在做这样的模拟:

$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上测试了它,它按预期工作。必须是你在项目中做的特定事情。