如何为文件下载创建PHP-Unit测试?

时间:2016-08-28 18:30:37

标签: php unit-testing phpunit

经过长时间思考这个主题没有结果,我希望有人可以给我一个关于phpUnit-Test下载的提示。如何为此函数创建一个phpUnit测试,该测试执行zip-File的下载?或者是否有一种通常的做法来测试这样的逻辑?

{{1}}

2 个答案:

答案 0 :(得分:3)

我觉得这个功能有几个组件,每个部分都应该进行测试,以确保它正确完成:

  • 构建正确的$zipFolderName路径
  • 设置正确的标题
  • 计算正确的文件大小
  • 读取文件

看起来某种文件处理程序抽象可以帮助您轻松地对此方法进行单元测试。

class FileUtils {
   public getDownloadFileName($folderName) {}
   public getFileSize($file) {}
   public readFile($file) {}
}

现在您可以将一个文件实用程序实例注入到您的函数中。对于您的生产代码,此类可以将文件操作转移到实际的文件系统,但是您的测试将提供存根/模拟,允许您断言您的单元正在执行预期的操作。

 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方法。

答案 1 :(得分:0)

我建议你vfsStream图书馆:

  

vfsStream是可能的虚拟文件系统的PHP流包装器   在单元测试中有助于模拟真实的文件系统。它可以使用   使用任何单元测试框架,如PHPUnit或SimpleTest。

同样有用的信息:

希望这有帮助。如果您需要一些示例,请告诉我们