如何在Laravel测试中模拟类的属性
我使用我的Laravel5.6应用程序中的类来处理zip文件。在测试中,我为ZipArchive类创建了一个模拟,如下所示:如何在Laravel测试中模拟类的属性,laravel,laravel-5,phpunit,ziparchive,Laravel,Laravel 5,Phpunit,Ziparchive,我使用我的Laravel5.6应用程序中的类来处理zip文件。在测试中,我为ZipArchive类创建了一个模拟,如下所示: $this->zipArchiveMock = $this->createMock(ZipArchive::class); 我可以模拟ZipArchive类上的方法,如下所示: $this->zipArchiveMock->expects($this->once()) ->method('open')
$this->zipArchiveMock = $this->createMock(ZipArchive::class);
我可以模拟ZipArchive类上的方法,如下所示:
$this->zipArchiveMock->expects($this->once())
->method('open')
->will($this->returnValue(true));
我想模拟ZipArchive类的一个名为numFiles的属性。我试过做$this->zipArchiveMock->numFiles=2
。但是$this->zipArchiveMock->numFiles
始终为0。如何模拟ZipArchive类上的属性
谢谢好的,因此有两个选项,您可以使用mockry模拟公共属性,也可以模拟
count()
函数
$this->zipArchiveMock->set('numFiles', 2);
(我不知道你是否使用嘲弄,但它包含在《拉威尔》中,所以我认为你使用了)
或:
编辑:
你不是在嘲笑,而是在嘲笑。我找不到在对象上模拟属性的方法,也找不到使用PHPUnit在模拟上设置属性的方法。相反,我建议你用这样的嘲弄:
$this->zipArchiveMock = \Mockery::mock('ZipArchive');
$this->zipArchiveMock->set('numFiles', 2);
$this->zipArchiveMock->shouldReceive('open')
->once()
->andReturn(true);
希望这对您有用。谢谢您的回复。Im使用PHP7.1.21,ZipArchive的count()函数仅在7.2中可用(参考:)。所以我必须使用numFiles属性。我做了
$this->zipArchiveMock->set('numFiles',2)代码>如您所建议,但随后我得到了对未定义方法Mock_ZipArchive_90b9991f::set()的错误调用。我刚刚发现您使用的是PHPUnit mocking。我找不到解决你的PHPUnit问题的办法。set()
方法是一种模拟方法。所以我更新了我的问题来解释更多的嘲弄。
$this->zipArchiveMock = \Mockery::mock('ZipArchive');
$this->zipArchiveMock->set('numFiles', 2);
$this->zipArchiveMock->shouldReceive('open')
->once()
->andReturn(true);