Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Phpunit 可以从mock方法返回mock吗?_Phpunit - Fatal编程技术网

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。对不起,现在我不能测试这个。