在运行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。