防止在测试期间将error_log()消息打印到终端

时间:2017-07-03 09:41:00

标签: php unit-testing phpunit error-log

正如标题所述,我期待找到一种方法来防止在error_log()测试期间在终端上打印PHPUnit消息。

enter image description here

在上面的示例中,测试中的方法通过error_log(不要显示')显示测试之间的消息。

有没有办法阻止这种行为,保持我的测试日志花哨?另外,有没有办法捕获消息并测试其输出? (对于消息不是简单字符串的情况)。

3 个答案:

答案 0 :(得分:2)

  

有没有办法阻止这种行为,保持我的测试日志花哨?另外,有没有办法捕获消息并测试其输出? (对于消息不是简单字符串的情况)。

首先,您看到的不是测试日志。 显示的错误消息实际上是标准错误流而不是标准输出流。对于你所看到的,这并没有什么区别,因为终端显示两者混合,记录到文件不会记录该错误消息。

这是b / c error_log()将错误消息写入配置的日志文件(PHP' s error_log ini指令)。由于Phpunit使用CLI的CLI版本运行(在命令行上),默认情况下是标准错误流。

这也包含所有需要的信息,不输出到标准错误流,而是捕获它,例如暂时进行测试:

$capture = tmpfile();
$saved = ini_set('error_log', stream_get_meta_data($capture)['uri']);
error_log("Test for this message");
ini_set('error_log', $saved);
var_dump(stream_get_contents($capture));

这将通过error_log()和临时文件提供内容输出:

string(59) "[06-Jul-2017 12:14:45 Europe/Amsterdam] Test for this message
"

当测试用例结束时,临时文件会自动删除。

答案 1 :(得分:0)

您可以使用set_error_handler()定义自己的错误处理程序。在评论#112881中,您可以看到使用回调的示例,您可以根据自己的需要进行调整,例如记录到文件,只需忽略或其他。

你可以将它放入你的phpunit bootstrap文件中,这应该可以解决问题。

答案 2 :(得分:0)

您应设置具有足够脚本写权限的日志文件的正确路径。

您可以如下设置错误日志文件路径:

ini_set("error_log", "log_file_name.log");

您可以使用

这样的绝对路径
/tmp/logs/script_output.log

或相对路径。