在phpunit测试中回显

时间:2012-01-09 14:53:07

标签: php phpunit

我一直在尝试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配置文件看起来它会被忽略。

4 个答案:

答案 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