2015-06-01 121 views
5

我正在嘗試使用Mockery創建一個模仿PHP內部ZipArchive類的模擬對象。無法在Mockery模擬對象上設置公共屬性

我有類似下面的PHP代碼:

$zipMock = Mockery::mock('ZipArchive'); 
$zipMock->numFiles = 10; 
echo 'NUMBER OF FILES: '.$zipMock->numFiles; 

然而,當我運行它,我得到以下結果:

NUMBER OF FILES: 0 

我希望它表明10,而不是0.我不明白爲什麼會發生這種情況,因爲the documentation意味着應該可以直接在模擬對象上設置公共屬性。我錯過了什麼?

+0

你使用什麼版本的PHPUnit? – vansanblch

+0

你用函數set()和set()來測試它嗎? –

回答

1

我不明白爲什麼會發生這種情況,因爲文檔暗示應該可以直接在模擬對象上設置公共屬性。我錯過了什麼?

你缺少點ZipArchive::$numFiles標準的公共財產。 A ZipArchive不是用戶級PHP類(普通的舊PHP對象),而是PHP擴展中的一個。這意味着該屬性是有效只讀:

因此,與嘲弄嘲弄是不是爲NUM文件屬性中的一個選項。但你可以用這個對象嘲笑你自己,這裏有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);