cuenta la situación siguiente (esto no es el código de producción):PHPUnit: ¿Cómo me burlo de este sistema de archivos?
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.");
}
}
}
derecho, ¿cuál es el problema? la cobertura de código informa que esta línea no está cubierto:
throw new Exception("Cannot open file handle.");
Qué es lo correcto, pero ya que estoy creando la carpeta anterior lógicamente parecería imposible que el fopen()
a fallar (excepto tal vez en circunstancias extremas, como en el disco 100%).
Podría ignorar el código de la cobertura del código, pero eso es un tipo de trampa. ¿Hay alguna manera en que pueda simular el sistema de archivos para que pueda reconocer myFile.txt
y se burle del sistema de archivos que no puede crear el archivo?
Quiero pasar el mkdir() y el fopen() falla con un vfs, pero ¿cómo configuro eso sin tener dos funciones separadas? –
Compruebe 'Mocking the Filesystem' específicamente a partir de los ejemplos' 10.15' en el enlace 'phpunit.de' anterior. La ventaja de usar vfs es que no hay dependencias reales en el sistema de archivos original. – raidenace