我对单元测试特别是 PHPUnit 很陌生,所以如果这是一个简单的问题,请原谅我。我做了一些谷歌搜索,但我不知道要搜索什么。
所以我有一个功能:
function convert_timezone($dt, $tzFrom, $tzTo, $format) {
$newDate = '';
$tzFromFull = timezone_name_from_abbr($tzFrom);
$tzToFull = timezone_name_from_abbr($tzTo);
if( $tzFromFull != $tzToFull ) {
$dtFrom = new DateTimeZone($tzFromFull);
$dtTo = new DateTimeZone($tzToFull);
try {
// find the offsets from GMT for the 2 timezones
$current = new DateTime(date('c',$dt));
$offset1 = $dtFrom->getOffset($current);
$offset2 = $dtTo->getOffset($current);
$offset = $offset2 - $offset1;
// apply the offset difference to the current time
$newDate = date($format, $current->format('U') + $offset);
} catch (Exception $e) {
$newDate = date($format.' (T)', $dt);
}
} else {
$newDate = date($format, $dt);
}
return $newDate;
}
这是测试功能:
function test_convert_timezone() {
$dt = mktime(0,0,0,1,1,2000);
$tzFrom = 'CDT';
$tzTo = 'EDT';
$format = 'd/m/Y g:i a';
$result = convert_timezone($dt, $tzFrom, $tzTo, $format);
$this->assertEquals($result, '01/01/2000 1:00 am');
}
当我直接在 Netbeans 中运行测试时,测试通过了。但是当我使用命令行选项生成代码覆盖率报告时,它告诉我这个函数没有被完全覆盖,因为测试没有遇到异常。
我知道如果我可以更改原始函数,我可以强制它抛出错误。但我不能那样做。我需要一种方法,在测试函数中传递一些东西,这将使被测试的函数遇到异常。我从哪说起呢?