我在我的laravel 5.6应用程序中使用ZipArchive类来处理zip文件。在我的测试中,我为ZipArchive类创建了一个模拟,如下所示:
$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类上模拟属性?
谢谢
好的,有两个选项,您可以使用Mockery模拟公共属性或模拟count()
函数。
$this->zipArchiveMock->set('numFiles', 2);
(我不知道你是否使用Mockery,但它包含在Laravel所以我假设你做了)http://docs.mockery.io/en/latest/reference/public_properties.html
要么:
$this->zipArchiveMock->expects($this->once())
->method('count')
->will($this->returnValue(2));
编辑:
你不是在使用Mockery而是使用PHPunit。我找不到一种方法来模拟对象的属性或使用PHPUnit在模拟上设置属性。相反,我建议你像这样使用Mockery:
$this->zipArchiveMock = \Mockery::mock('ZipArchive');
$this->zipArchiveMock->set('numFiles', 2);
$this->zipArchiveMock->shouldReceive('open')
->once()
->andReturn(true);
希望这对你有用。