Sco*_*ott 7 php phpunit unit-testing syslog
有没有办法在使用phpunit进行单元测试时对从'error_log("Message")调用创建的输出运行测试?
示例代码,我的一个函数使用luhn算法测试信用卡:
if($checkLuhn && ($this->_luhn_check($cardNumber) == false)) {
error_log(__METHOD__ . " cardNumber failed luhn algorithm check.");
return false;
}
Run Code Online (Sandbox Code Playgroud)
$ checkLuhn是传入的布尔值,告诉它是否进行检查,如果$ cardNumber通过,_luhn_check()返回true.问题是,我在这个函数中有多个测试可以返回false.我可以在返回值上使用assertEquals,但也想检查抛出错误的原因.
您可以覆盖error_log或以其他方式在单元测试中获取syslog输出吗?
小智 6
有几种不同的方法来指导error_log()发送数据的位置.
首先是将error_log()发送到其他地方.一个例子是:
error_log( 'This is a message from error_log()', 3, '/dev/stdout' );
Run Code Online (Sandbox Code Playgroud)
它使用error_log()的目标选项.
另一种方法是覆盖PHP中的error_log ini设置.这看起来像是这样的:
$cur_error_log = ini_get( 'error_log' );
ini_set( 'error_log', '/dev/stdout' );
error_log( 'This is a message from error_log()' );
ini_set( 'error_log', $cur_error_log );
Run Code Online (Sandbox Code Playgroud)
在这两个选项中,我通常更喜欢在error_log()中使用destination选项.
从那里你可以使用PHPUnit中的expectOutputString()来查找从error_log()发送的数据.