在运行 PHPUnit 测试时,我希望能够转储输出,以便调试一两件事情。
我尝试了以下(类似于PHPUnit 手册示例);
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 -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 编写测试 - 测试输出。