PHPUnit如何测试二进制输出?

PHPUnit如何测试二进制输出?,php,unit-testing,testing,phpunit,Php,Unit Testing,Testing,Phpunit,我有一个PHP类,它输出适当的图像/jpeg内容头和JPG二进制数据。我想使用PHPUnit测试这个类,以确保它输出正确的图像 我的测试方法是: public function testNotFound(){ ob_start(NULL,0); Model\Photo::deliver('blabbityblabbyblab'); $content = ob_get_clean(); $this->assertEquals(50,strlen($conte

我有一个PHP类,它输出适当的
图像/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生成的错误:

测试代码或测试代码没有(仅)关闭自己的输出缓冲区


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

这也让我最近感到困惑。您似乎正在使用PHPUnit的更高版本(例如4.5)。它们通过以下方式:

  • expectOutputString(string$expectedString)
  • expectOutputRegex(字符串$regularExpression)

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

可能Model\Photo::deliver语句中存在一些错误或警告,使得PHPUnit在关闭缓冲区之前不会中断进程。如果你注释了那个句子会发生什么?+注释掉那个测试会导致断言按预期正确地失败。不过,
deliver
的唯一输出是输出
内容类型
标题和jpg数据。粘贴在此处的代码:头不受输出缓冲区的限制。仅当标题尚未发送时才尝试发送,并使用headers_sent()php函数进行检查。@gontrollez:添加此项只会导致deliver()输出的二进制数据回显到屏幕上。我不知道为什么它没有被输出缓冲区捕获。