Как создать PHP-модульный тест для загрузки файла?
после долгого размышления об этой теме без результата, я надеюсь, что кто-то может дать мне подсказку о phpUnit-Test для загрузки. Как я могу создать тест phpUnit для этой функции, который выполняет загрузку для zip-файла? Или есть обычная практика oter для проверки такой логики?
public function createOutput($zipFolderName) {
$zipFolderName = $zipFolderName."/imageResizer.zip";
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename=' . $zipFolderName);
header('Content-Length: ' . filesize($zipFolderName));
readfile($zipFolderName);
}
2 ответов
Я чувствую, что есть несколько компонентов этой функции, и каждая часть должна быть протестирована, чтобы убедиться, что она выполняется правильно:
- строит правильно
$zipFolderName
путь - задает правильные заголовки
- вычисляет правильный размер
- считывает файл
похоже, что какая-то абстракция обработчика файлов может помочь вам легко протестировать этот метод.
class FileUtils {
public getDownloadFileName($folderName) {}
public getFileSize($file) {}
public readFile($file) {}
}
теперь вы может ввести экземпляр file utility в вашу функцию. Для вашего производственного кода этот класс будет выполнять операции с файлами delgate в фактическую файловую систему, но ваш тест предоставит заглушку/макет, который позволит вам утверждать, что ваш блок выполняет ожидаемые действия.
public function createOutput($fileUtilsInstance, $zipFolderName) {
$zipFolderName = $fileUtilsInstance->getDownloadFileName($zipFolderName);
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename=' . $zipFolderName);
header('Content-Length: ' . $fileUtilsInstance->getFilesize($zipFolderName));
$fileUtilsInstance->readFile($zipFolderName);
}
та же тактика может быть применена к header
метод.
Я предлагаю вам vfsStream библиотека:
vfsStream-это оболочка потока PHP для виртуальной файловой системы, которая может будьте полезны в модульных тестах, чтобы издеваться над реальной файловой системой. Его можно использовать с любой структурой модульного тестирования, например PHPUnit или SimpleTest.
та же полезная информация в:
- PHPUNIT DOC-издевательство над разделом файловой системы
- очень полезный пример кода в этой статье - ИЗДЕВАТЕЛЬСТВО НАД ФАЙЛОВОЙ СИСТЕМОЙ С ПОМОЩЬЮ PHPUNIT И VFSSTREAM
надеюсь, что это поможет. Дайте мне знать, если вам нужны примеры