一尘不染

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

php

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


阅读 238

收藏
2020-05-29

共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编写测试-测试输出

2020-05-29