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


当前回答

可以使用Symfony\Component\Console\Output\TrimmedBufferOutput,然后像这样测试缓冲的输出字符串:

use Symfony\Component\Console\Output\TrimmedBufferOutput;

//...
public function testSomething()
{
   $output = new TrimmedBufferOutput(999);
   $output->writeln('Do something in your code with the output class...');
   
   //test the output:
   $this->assertStringContainsString('expected string...', $output->fetch());   
}

其他回答

PHPUnit用ob_start()隐藏输出。我们可以暂时关闭它。

    public function log($something = null)
    {
        ob_end_clean();
        var_dump($something);
        ob_start();
    }

执行phpunit时只需使用——verbose标志。

$ phpunit --verbose -c phpunit.xml 

这种方法的优点是你不需要改变测试代码,你可以打印字符串,var_dump或任何你想要的东西,只有在设置verbose模式时,它才会显示在控制台上。

我希望这能有所帮助。

如果您使用Laravel,那么您可以使用诸如info()这样的日志函数来记录到存储/日志下的Laravel日志文件。所以它不会出现在终端中,而是出现在日志文件中。

尝试使用——debug

如果您试图获得包含数据文件或源数据文件的正确路径,则此选项非常有用。

它是一个付费产品,但我发现它做得很好:来自Spatie的Ray https://spatie.be/products/ray

就像这样使用它:

射线(“消息”)

消息将显示在Ray输出窗口中