PHPUnit测试将error_log写入stdout

时间:2016-05-06 01:25:17

标签: php phpunit

我试图为写入error_log的类编写PHPUnit测试,但似乎在PHPUnit的输出缓冲方面遇到了麻烦。

由于error_log在给定一个未知的SUT php.ini配置时可能存在波动性,因此在writing to stdout取得有限成功后,我最终决定overloading via namespace

不幸的是,似乎有一些关于PHPUnit缓冲输出的怪癖,因为调用expectOutputString返回一个空字符串为" Actual"而不是写给stdout的内容。

这是一个快速而肮脏的测试课,我写的是为了消除任何可能让我意外悲伤的东西(" ObTest.php"):

<?php
namespace Some\Test;

class ObTest
{
    public function writeToErrorLog($message)
    {
        error_log($message);
    }
}

这是我写的测试:

<?php

namespace Some\Test;

include "ObTest.php";

class ObTestTest extends \PHPUnit_Framework_TestCase
{
    public static $error_log_config;

    public static function setUpBeforeClass()
    {
        self::$error_log_config = ini_get("error_log");

        ini_set("error_log", "/dev/stdout");
    }

    public static function tearDownAfterClass()
    {
        ini_set("error_log", self::$error_log_config);
    }

    public function testWriteToErrorLogOutputs()
    {
        $ob_test = new ObTest();

        $this->expectOutputString("Test");

        $ob_test->writeToErrorLog("Test");
    }
}

最后输出:

PHPUnit 5.4-g9b5b99b by Sebastian Bergmann and contributors.

[06-May-2016 01:05:51 UTC] Test

Failed asserting that two strings are equal.
Expected :'Test'
Actual   :''

请注意,由于时间戳的原因,我确实认为测试无论如何都会失败,但是用expectOutputRegex编写测试是不必要的,以证明空白字符串被返回为&#34; Actual&#34 ;;我可以确认使用正则表达式选项获得相同的结果。

我正在运行PHP 5.6.20-1 + deb.sury.org~trusty + 1如果它是相关的。

更新2016-05-22

根据评论,我尝试了几种设置error_log的变体来写入输出,包括STDOUT常量和php://output流,但都没有成功。

对于任何感兴趣或遇到类似问题的人,我也记录了issue on GitHub认为这可能是某种错误,但是在此更新中它还没有得到任何关注。该问题指出,我还在最新稳定的PHPUnit版本(5.3.2)上尝试了此操作但没有成功。

0 个答案:

没有答案