Эхо в тестах phpunit
Я пытаюсь использовать echo
материал в своих тестах phpunit, но пока не повезло.
Я прочитал документацию о файле конфигурации xml и, по-видимому, параметр debug
- это то, что я ищу. К сожалению, он все еще не работает. В любом случае, вот мой конфигурационный файл xml:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit colors="true"
processIsolation="true"
verbose="true"
debug="true">
</phpunit>
Оба processIsolation
и verbose
принимаются, но debug
нет.
Команда действительно работает очень хорошо, когда я прямо передаю ее phpunit следующим образом:
phpunit --debug MyTest.php # here stuff is echoed correctly
но с конфигурационным файлом xml он выглядит так, как будто он игнорируется.
Ответы
Ответ 1
Текущие версии PHPUnit >3.6.4
(и всех версий 3.5.*
) просто распечатывают все, что вы echo
в тестовом примере.
<?php
class OutputTestCase extends PHPUnit_Framework_TestCase {
public function testEcho() {
echo "Hi";
}
}
дает:
phpunit foo.php
PHPUnit 3.6.7 by Sebastian Bergmann.
.Hi
Time: 0 seconds, Memory: 3.25Mb
OK (1 test, 0 assertions)
Итак, если вы в старой версии 3.6
просто обновите:)
Ответ 2
Убедитесь, что вы не вызываете exit() или kill(). PHPUnit буферизирует операторы эха, и этот буфер будет потерян без вывода, если ваш script выйдет во время теста.
Ответ 3
processIsolation
подавляет вывод тестов, поэтому вы должны отключить его.
Взаимодействие с флагом debug
, вероятно, было связано с этим:
https://github.com/sebastianbergmann/phpunit/pull/1489
Ответ 4
Если ваш тест занимает много времени, и вы хотите увидеть результат во время процесса, добавьте следующий метод в свой тестовый класс:
protected function prontoPrint($whatever = 'I am printed!')
{
// if output buffer has not started yet
if (ob_get_level() == 0) {
// current buffer existence
$hasBuffer = false;
// start the buffer
ob_start();
} else {
// current buffer existence
$hasBuffer = true;
}
// echo to output
echo $whatever;
// flush current buffer to output stream
ob_flush();
flush();
ob_end_flush();
// if there were a buffer before this method was called
// in my version of PHPUNIT it has its own buffer running
if ($hasBuffer) {
// start the output buffer again
ob_start();
}
}
Теперь, когда вы вызываете $this->prontoPrint($variable)
внутри вашего тестового класса, он немедленно отображает текст в консоли. Я использовал этот комментарий php.net для записи функции.
PHPUnit 5.7.21
PHP 5.6.31 with Xdebug 2.5.5