我试图使用Mockery创建一个模仿PHP内部ZipArchive
类的模拟对象。
我有类似下面的PHP代码:
$zipMock = Mockery::mock('ZipArchive');
$zipMock->numFiles = 10;
echo 'NUMBER OF FILES: '.$zipMock->numFiles;
然而,当我运行它时,我得到以下结果:
NUMBER OF FILES: 0
我希望它显示10而不是0.我无法解决为什么会发生这种情况,因为the documentation意味着应该可以直接在模拟对象上设置公共属性。我错过了什么?
答案 0 :(得分:1)
我无法弄清楚为什么会发生这种情况,因为文档暗示应该可以直接在模拟对象上设置公共属性。我错过了什么?
您错过了ZipArchive::$numFiles
不标准公共财产的观点。 ZipArchive 不是userland PHP类(普通的旧PHP对象),而是PHP扩展中的一个。这意味着该属性有效地只读:
因此,使用Mockery进行模拟不是num-files属性的选项。但你可以使用该对象模拟自己的对象,这里有10个文件:
$file = tempnam(sys_get_temp_dir(), 'zip');
$zip = new ZipArchive;
$zip->open($file, ZipArchive::CREATE);
foreach(range(1, 10) as $num) {
$zip->addFromString($num, "");
}
var_dump($zip->numFiles);
$zip->close();
unlink($file);