正如标题所述,我期待在我的PHPUnit
测试期间找到一种方法来防止在终端中打印error_log()
消息。防止在测试期间将error_log()消息打印到终端
在上面的例子中,被测试的方法穿过一个error_log中(“唐\”吨显示'),打印测试之间它的消息。
有什么办法可以防止这种行为,让我的测试日志保持幻想?另外,有没有什么方法可以捕捉消息并测试其输出? (对于消息不是简单字符串的情况)。
正如标题所述,我期待在我的PHPUnit
测试期间找到一种方法来防止在终端中打印error_log()
消息。防止在测试期间将error_log()消息打印到终端
在上面的例子中,被测试的方法穿过一个error_log中(“唐\”吨显示'),打印测试之间它的消息。
有什么办法可以防止这种行为,让我的测试日志保持幻想?另外,有没有什么方法可以捕捉消息并测试其输出? (对于消息不是简单字符串的情况)。
有什么办法来防止这种行为,让我的测试日志保持幻想?另外,有没有什么方法可以捕捉消息并测试其输出? (对于消息不是简单字符串的情况)。
首先你看到的不是测试日志。 显示的错误消息实际上是标准错误流而不是标准输出流。对于你所看到的,这并没有什么不同,因为终端显示两者混合在一起,记录到文件不会记录该错误消息。
这是b/c error_log()
将错误消息写入配置的日志文件(PHP的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
"
与测试例结束时,临时文件被自动删除。
您可以使用set_error_handler()
来定义自己的错误处理程序。在评论#112881中,您可以看到一个使用回调的示例,您可以根据自己的需要进行调整,例如登录文件,简单地忽略或不管。
你可以把它放到你的phpunit bootstrap文件中,那应该可以做到。