断言抛出异常
PHPUnit 提供以下函数来监视抛出的异常,它们随 5.2.0 一起发布:
expectException($exception)
expectExceptionMessage($message)
expectExceptionCode($code)
expectExceptionMessageRegExp($messageRegExp)
这些用于监视要抛出的异常并检查该异常的属性。
让我们从分开的数学函数开始(仅为简单起见)。如果分母为零,则会引发异常。
function divide($numerator, $denominator) {
if ($denominator !== 0) {
return $numerator/$denominator;
} else {
throw new \Exception("Cannot divide by zero", 100);
}
}
现在为测试代码。
class DivideTest extends PHPUnit_Framework_TestCase
{
public function test_divide() {
$this->assertSame(2,divide(4,2));
$this->expectException("Exception");
$this->expectExceptionCode(100);
$this->expectExceptionMessage("Cannot divide by zero");
$this->expectExceptionMessageRegExp('/divide by zero$/');
// the expectations have been set up, now run the code
// that should throw the exception
divide(4,0);
// The following code will not execute, the method has exited
$this->assertSame(0,1);
}
}
test_divide()
函数首先声明函数正确地将 4 除以 2 并回答 2.该断言将通过。
接下来,设置对即将发生的异常的期望。请注意,它们是在抛出异常的代码之前设置的。所有四个断言都是出于演示目的而展示的,但这通常不是必需的。
然后 divide(4,0)
将抛出预期的异常,并且所有期望的*函数都将通过。