单元测试的文件下载?

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

   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);
    }

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

  • 生成正确的$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方法。


    我建议你vfsStream库:

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

    相同的有用信息:

  • PHPUNIT DOC - 模拟文件系统部分
  • 本文中真正有用的代码示例 - 使用PHPUNIT和VFSSTREAM模拟文件系统
  • 希望这个帮助。 让我知道你是否需要一些例子

    链接地址: http://www.djcxy.com/p/36049.html

    上一篇: Unit test for a file download?

    下一篇: Vertical scrollview conflicting with vertical navigation