运行PHPUnit测试时,我希望能够转储输出,以便可以调试一两个东西。
我已经尝试了以下内容(类似于PHPUnit Manual示例);
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版本的HEAD版本。
输出php -version:
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命令行选项要好得多:
--verbose
class TestSomething extends PHPUnit_Framework_TestCase { function testSomething() { $myDebugVar = array(1, 2, 3); fwrite(STDERR, print_r($myDebugVar, TRUE)); } }
这样,您可以随时将任何内容转储到控制台,而无需使用--verboseCLI选项附带的所有不需要的输出。
正如其他答案所指出的那样,最好使用以下内置方法来测试输出:
$this->expectOutputString('foo');
但是,有时调皮并从测试用例中查看一次性的/临时的调试输出有时会很有帮助。但是,无需采取var_dump破解/解决方法。通过--verbose在运行测试套件时设置命令行选项,可以轻松实现此目的。例如:
var_dump
$ phpunit --verbose -c phpunit.xml
在CLI环境中运行时,这将显示测试方法内部的输出。
请参阅:为PHPUnit编写测试-测试输出。