Rozważmy następujący scenariusz (to nie jest kod produkcji):PHPUnit: Jak wyśmiać ten system plików?
class MyClass {
public function myMethod() {
// create a directory
$path = sys_get_temp_dir() . '/' . md5(rand());
if(!mkdir($path)) {
throw new Exception("mkdir() failed.");
}
// create a file in that folder
$myFile = fopen("$path/myFile.txt", "w");
if(!$myFile) {
throw new Exception("Cannot open file handle.");
}
}
}
Prawo, więc w czym problem? pokrycie kodu informuje, że linia ta nie jest objęta:
throw new Exception("Cannot open file handle.");
Które jest poprawne, ale ponieważ tworzę folder powyżej logicznie wydaje się niemożliwe dla fopen()
na niepowodzenie (z wyjątkiem być może w skrajnych przypadkach, jak na dysku 100%).
Mogę zignorować kod z zasięgu kodu, ale to rodzaj oszustwa. Czy istnieje sposób, w jaki mogę sfałszować system plików, aby mógł rozpoznać myFile.txt
i wyśmiać system plików, nie mogąc utworzyć pliku?
Chcę, aby mkdir() przepuścił i fopen() zawiodł z vfs, ale jak mam to ustawić bez dwóch osobnych funkcji? –
Zaznacz "Prześmiewanie systemu plików", zaczynając od przykładów '10.15' w powyższym linku' phpunit.de'. Zaletą korzystania z vfs jest brak rzeczywistych zależności od oryginalnego systemu plików. – raidenace