【问题标题】:PHPUnit How to test binary output?PHPUnit 如何测试二进制输出?
【发布时间】:2014-09-11 18:04:28
【问题描述】:

我有一个 PHP 类,可以输出适当的 image/jpeg 内容标头和 JPG 二进制数据。我想使用 PHPUnit 测试这个类,以确保它输出正确的图像。

我的测试方法是:

public function testNotFound(){
    ob_start(NULL,0);
    Model\Photo::deliver('blabbityblabbyblab');
    $content = ob_get_clean();

    $this->assertEquals(50,strlen($content));
}

Model\Photo 将输出一个特定的已知图像。但是,断言永远不会运行,并且我收到 PHPUnit 生成的错误:

Test code or tested code did not (only) close its own output buffers

如何只关闭我在测试方法中启动的缓冲区?

【问题讨论】:

  • 可能 Model\Photo::deliver 语句中存在一些错误或警告,导致 PHPUnit 在关闭缓冲区之前中断进程。如果你评论那句话会发生什么?+
  • 注释掉该测试会导致断言按预期正确失败。 deliver 的唯一输出是输出 Content-type 标头和 jpg 数据。此处粘贴代码:pastebin.com/eLAY7v6X
  • 标题不被输出缓冲捕获。仅在尚未发送标头时尝试发送标头,并使用 headers_sent() php 函数进行检查。
  • @gontrollez:添加它只会导致 Deliver() 输出的二进制数据回显到屏幕上。我不确定为什么它没有被输出缓冲区捕获。

标签: php unit-testing testing phpunit


【解决方案1】:

这也让我最近也犯了难。您似乎正在使用更高版本的 PHPUnit(例如 4.5)。他们changed the way that output buffering is handled 通过:

  • expectOutputString(string $expectedString)
  • expectOutputRegex(string $regularExpression)

我相信在您的示例中,您可以使用 RegEx 方法来确保预期的 EXIF 数据字符串出现在图像或其他一些测试中。

【讨论】:

    猜你喜欢
    • 2012-02-21
    • 2012-03-10
    • 2021-12-17
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    相关资源
    最近更新 更多