2014-09-11 6 views
0

У меня есть класс PHP, который выводит соответствующий заголовок содержимого image/jpeg и двоичные данные JPG. Я бы хотел протестировать класс с помощью PHPUnit, чтобы убедиться, что он выводит правильное изображение.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

Как только закрыть буфер, я начал в моем методе испытания?

+0

Возможно, есть некоторая ошибка или предупреждение в предложении Model \ Photo :: deliver, которое заставляет PHPUnit прерывать процесс до закрытия буфера. Что произойдет, если вы прокомментируете это предложение? + – gontrollez

+0

Комментируя, что тест заставляет утверждение должным образом терпеть неудачу, как ожидалось. Единственный выход 'deliver', хотя и выводит заголовок' Content-type' и jpg-данные. Код, вставленный здесь: http://pastebin.com/eLAY7v6X – Pickle

+0

Заголовки не защищены от буферизации вывода. Попробуйте отправить заголовки только в том случае, если они еще не отправлены, проверяя его с помощью функции headers_sent() php. – gontrollez

ответ

0

Это тоже помогло мне в последнее время. Кажется, вы используете более позднюю версию PHPUnit (например, 4.5). Они changed the way that output buffering is handled путем:

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

Я считаю, что в вашем примере вы могли бы использовать метод RegEx, чтобы убедиться, что ожидаемая строка EXIF ​​данные появились в образе или какой-то другой тест ,

Смежные вопросы