在运行PHPUnit测试时,我希望能够转储输出,以便可以调试一两个东西。

我已经尝试了以下内容(类似于PHPUnit Manual example);

class theTest extends PHPUnit_Framework_TestCase
{
    /**
     * @outputBuffering disabled
     */
    public function testOutput() {
        print_r("Hello World");
        print "Ping";
        echo "Pong";
        $out = "Foo";
        var_dump($out);
    }
}

结果如下:
PHPUnit @package_version@ by Sebastian Bergmann.

.

Time: 0 seconds, Memory: 3.00Mb

OK (1 test, 0 assertions)

请注意,没有任何预期的输出。

截至2011年9月19日,我正在使用git repos的HEAD版本。
php -version的输出:
$ php -version
PHP 5.2.9 (cli) (built: Dec  8 2010 11:36:37)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
    with Xdebug v2.1.0, Copyright (c) 2002-2010, by Derick Rethans

我做错了什么吗,或者这可能是一个PHPUnit错误?

最佳答案

更新

刚刚意识到实现此目的的另一种方法比--verbose命令行选项好得多:

class TestSomething extends PHPUnit_Framework_TestCase {
    function testSomething() {
        $myDebugVar = array(1, 2, 3);
        fwrite(STDERR, print_r($myDebugVar, TRUE));
    }
}

这样,您就可以随时将任何内容转储到控制台,而无需使用--verbose CLI选项随附的所有不需要的输出。

正如其他答案所指出的,最好使用以下内置方法来测试输出:
$this->expectOutputString('foo');

但是,有时调皮并从测试用例中查看一次性的/临时的调试输出有时会很有帮助。不过,无需var_dump hack/解决方法。通过在运行测试套件时设置--verbose命令行选项,可以轻松实现此目的。例如:
$ phpunit --verbose -c phpunit.xml

在CLI环境中运行时,这将显示测试方法内部的输出。

请参阅:Writing Tests for PHPUnit - Testing Output

09-10 02:40
查看更多