Phpunit 可以从mock方法返回mock吗?
我有工厂Phpunit 可以从mock方法返回mock吗?,phpunit,Phpunit,我有工厂 class DocumentManagerFactory { .... public function createDocumentManager(): DocumentManager { return DocumentManager::create($this->client, $this->configuration); } } 我想模拟DocumentManager,它通过createDocumentManage
class DocumentManagerFactory
{
....
public function createDocumentManager(): DocumentManager
{
return DocumentManager::create($this->client, $this->configuration);
}
}
我想模拟DocumentManager
,它通过createDocumentManager
$dmStub = $this->createMock(DocumentManager::class)
->method('refresh')
->willReturnArgument(1);
$dmFactoryStub = $this->createMock(DocumentManagerFactory::class)
->method('createDocumentManager')
->willReturn($dm);
我得到以下错误:
方法createDocumentManager可能不会返回PHPUnit\Framework\MockObject\Builder\InvocationMocker类型的值,其返回声明为:条令\ODM\MongoDB\DocumentManager
有可能吗?这是因为您将调用链接到mock,然后将它们分配给变量。如果你把它们分开,它应该可以正常工作
$dmStub = $this->createMock(DocumentManager::class);
$dmStub->method('refresh')
->willReturnArgument(1);
$dmFactoryStub = $this->createMock(DocumentManagerFactory::class);
$dmFactoryStub->method('createDocumentManager')
->willReturn($dm);
在这种情况下,变量实际上保存的是对象而不是调用。您使用的是哪个Phpunit版本?@hakre
Phpunit/Phpunit 8.4.3
是否为应该返回模拟的方法暗示了返回类型?IIRC我已经看到这个“正在工作”如果类型提示在哪里。因此,不是标准的mocknull返回,而是返回类型hint类/接口的mock。对不起,现在我不能测试这个。