小编典典

在执行 PHP 单元测试期间如何在 CLI 中输出?

all

在运行 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 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 错误?


阅读 76

收藏
2022-07-09

共1个答案

小编典典

更新

--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在运行测试套件时设置命令行选项轻松完成。例如:

$ phpunit --verbose -c phpunit.xml

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

请参阅:为 PHPUnit 编写测试 - 测试输出

2022-07-09