Ric*_*ola 2 php phpunit unit-testing error-log
正如标题所述,我期待找到一种方法来防止error_log()在测试期间在终端中打印消息PHPUnit。
在上面的示例中,被测试的方法通过 error_log('Don\'t show up'),在测试之间打印其消息。
有什么方法可以防止这种行为,让我的测试日志保持美观?另外,有什么方法可以捕获消息并测试其输出吗?(对于消息不是简单字符串的情况)。
有什么方法可以防止这种行为,让我的测试日志保持美观?另外,有什么方法可以捕获消息并测试其输出吗?(对于消息不是简单字符串的情况)。
首先你看到的不是测试日志。显示的错误消息实际上位于标准错误流上,而不是标准输出流上。对于您所看到的,这没有太大区别,因为终端显示两者混合,记录到文件不会记录该错误消息。
这是 b/cerror_log()将错误消息写入配置的日志文件(PHP 的error_logini 指令)。由于 Phpunit 与 PHP 的 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));
Run Code Online (Sandbox Code Playgroud)
error_log()这将通过临时文件提供内容输出:
string(59) "[06-Jul-2017 12:14:45 Europe/Amsterdam] Test for this message
"
Run Code Online (Sandbox Code Playgroud)
测试用例结束时,临时文件将自动删除。