在运行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版本.

yields 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的错误?

推荐答案

UPDATE

我刚刚意识到另一种比--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环境中运行时,这将显示测试方法内部的输出.

见:Writing Tests for PHPUnit - Testing Output.

Php相关问答推荐

PHP等效于SQL的DATEDiff

为什么这个方法调用用引号和花括号包裹?

无法使用PHP DomDocument找到IMG元素

419注册期间Laravel 11中的错误

Symfony/Panther Web抓取不适用于登录后的内容(云功能)

Nginx重写扩展名为.php的动态URL

无法在WooCommerce中发送客户笔记邮箱通知

从订单项目中获取ACF WooCommerce产品价值

如何使用索引加速和优化MySQL搜索

如何按类别过滤自定义帖子类型

是否有条件判断是否发布了另一个Wordpress页面?

PHP 支持 APNG 文件吗?

Font Awesome 加载图标未显示在 WooCommerce 管理员列表中

如果 Select 的县不是store 所在的县,如何隐藏本地自提?

如何在 Phpunit 的静态提供程序中创建测试双打?

Laravel路由中的符号在slug中会创建额外的斜杠

PHP使用三元运算符进行null合并(再次)

如何从此字符串创建 Carbon 对象:2022-06-21T05:52:46.648533678Z?

PDO 和 SQL 查询结果中日期格式不同的原因可能是什么?

PHP / DOM : 解析 HTML 以提取基于类的数​​据