我一直在尝试echo
我的phpunit测试,但到目前为止没有运气。
我阅读了有关xml配置文件的文档,显然debug
参数正是我要找的。不幸的是它仍然无效。无论如何这是我的xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit colors="true"
processIsolation="true"
verbose="true"
debug="true">
</phpunit>
{0}}和processIsolation
都被接受但verbose
不被接受。
当我直接将它传递给phpunit时,该命令实际上工作正常:
debug
但是使用xml配置文件看起来它会被忽略。
答案 0 :(得分:15)
当前版本的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
版本,只需升级:)
答案 1 :(得分:3)
确保不要调用exit()或kill()。 PHPUnit缓冲了echo语句,如果你的脚本在测试期间退出,那么缓冲区将会丢失而没有输出。
答案 2 :(得分:1)
processIsolation
正在抑制测试的输出,因此您必须禁用它。
与debug
标志的交互可能是对此的疏忽:
https://github.com/sebastianbergmann/phpunit/pull/1489
答案 3 :(得分:0)
如果您的测试需要很长时间,并且您希望在此过程中看到输出,请将以下方法添加到测试类中:
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 comment来编写函数。
PHPUnit 5.7.21
PHP 5.6.31 with Xdebug 2.5.5