【问题标题】:How to use output buffering inside PHPUnit test?如何在 PHPUnit 测试中使用输出缓冲?
【发布时间】:2026-02-12 22:45:02
【问题描述】:

我正在使用 PHPUnit 来测试一个下载文件的函数。我想测试是否下载了正确的文件,所以我的想法是检查函数的输出。我正在尝试使用输出缓冲:

ob_start();
$viewer->downloadById($fileId);
$output = ob_get_flush();
$this->assertEquals($expectedFileContents,$output);

测试在应该通过/失败的时候通过/失败,这很好。我的问题是输出缓冲区的内容也打印到控制台。我该如何隐藏这个?

【问题讨论】:

    标签: php unit-testing testing phpunit


    【解决方案1】:

    使用ob_get_clean() 代替ob_get_flush()。前者将删除缓冲区而不打印它并返回其内容。后者将执行相同的操作并打印缓冲区的内容。

    【讨论】:

    • 谢谢!我刚刚为自己解决了这个问题,然后回到这里发布答案!
    • @user1578653,正在从外部网站下载文件,执行 HTTP 请求吗? (完全与您的问题无关,只是出于好奇)
    • 不,在 $viewer->downloadById() 我正在从 Oracle 数据库(可能是远程的)中检索 BLOB 并打印出内容(在发送标头之后)。