Как создать 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.

та же полезная информация в:

надеюсь, что это поможет. Дайте мне знать, если вам нужны примеры