将error_log()
输出捕获到变量中
如果您想以一种可以使用PHPUnit断言进行检查的方式重定向error_log()
输出,以下代码适用于我:
$errorLogTmpfile = tmpfile();
$errorLogLocationBackup = ini_set('error_log', stream_get_meta_data($errorLogTmpfile)['uri']);
error_log("Test for this message");
ini_set('error_log', $errorLogLocationBackup);
$result = stream_get_contents($errorLogTmpfile);
正如您所看到的,它使用临时文件来收集输出,然后将内容抓取到变量中并重置error_log配置。
可重复使用的方法
个人而言,我将其组织成一对方法,并使用trait将其注入PHPUnit对象中,以便我可以重复使用它们。
当然,下面的代码不能直接使用,但它可以演示如何使此系统可重复使用:
trait WithWPTestCaseGeneralTools {
var $gvErrorLogLocationBackup = "";
var $gvErrorLogTmpfile = "";
public function gvErrorLogStartListening() {
$this->gvErrorLogTmpfile = tmpfile();
$streamUri = stream_get_meta_data($this->gvErrorLogTmpfile)['uri'];
$this->gvErrorLogLocationBackup = ini_set('error_log', $streamUri);
}
public function gvErrorLogGetContents() {
ini_set('error_log', $this->gvErrorLogLocationBackup);
return stream_get_contents($this->gvErrorLogTmpfile);
}
}
当然,你也可以使用一些使用全局变量的函数来实现相同的功能,如果这是你需要的,我会把它留给你!
error_log
的代码,Alister在当前命名空间中覆盖error_log
的示例对于测试非常有效。 - ThorSummoner