斷言丟擲異常
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)
將丟擲預期的異常,並且所有期望的*函式都將通過。