2015-06-01 12 views
5

Próbuję użyć Mockery do stworzenia symulowanego obiektu, który naśladuje wewnętrzną klasę PHP ZipArchive.Nie można ustawić właściwości publicznej na kpieniu z obiektu Mockery

Mam coś podobnego do następującego kodu PHP:

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

Jednakże gdy uruchomię go uzyskać następujący wynik:

NUMBER OF FILES: 0 

bym się go spodziewać, aby pokazać 10, zamiast 0. Nie mogę zrozumieć, dlaczego tak się dzieje, ponieważ the documentation sugeruje, że powinno być możliwe bezpośrednie ustawienie właściwości publicznych na próbnych obiektach. czego mi brakuje?

+0

Jakiej wersji PHPUnit używasz? – vansanblch

+0

Czy testowałeś go za pomocą funkcji 'set()' oraz 'andSet()'? –

Odpowiedz

1

Nie mogę zrozumieć, dlaczego tak się dzieje, ponieważ dokumentacja sugeruje, że powinno być możliwe bezpośrednie ustawienie właściwości publicznych na próbnych obiektach. czego mi brakuje?

Teraz brakuje punktu że ZipArchive::$numFiles jest nie standardową własność publiczną. A ZipArchive nie jest klasą PHP użytkownika (zwykły stary obiekt PHP), ale jednym z rozszerzenia PHP. Oznacza to, że nieruchomość jest skutecznie read-only:

Więc szydząc z Kpina nie jest opcją dla właściwości num-Files. Ale możesz kpić sobie z tego obiektu, z 10 plikami:

$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); 
Powiązane problemy