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

10

在长时间思考这个话题但没有结果之后,我希望有人能给我一个关于phpUnit-Test下载的提示。如何为执行zip文件下载的函数创建phpUnit测试?或者是否有其他通常的做法来测试类似这样的逻辑?

   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个回答

5

我觉得这个函数有几个组成部分,每个部分都应该进行测试以确保其正确完成:

  • 构建正确的$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方法中。

0

1
但是这个程序在处理zip文件时有已知问题 - codedge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接