測試異常
假設你要測試丟擲異常的方法
class Car
{
/**
* @throws \Exception
*/
public function drive()
{
throw new \Exception('Useful message', 1);
}
}
你可以通過將方法呼叫封裝到 try / catch 塊中並對 execption 物件的屬性進行斷言來實現,但更方便的是你可以使用異常斷言方法。從 PHPUnit 5.2 開始, 你可以使用 expectX()
方法來斷言異常型別,訊息和程式碼
class DriveTest extends PHPUnit_Framework_TestCase
{
public function testDrive()
{
// prepare
$car = new \Car();
$expectedClass = \Exception::class;
$expectedMessage = 'Useful message';
$expectedCode = 1;
// test
$this->expectException($expectedClass);
$this->expectMessage($expectedMessage);
$this->expectCode($expectedCode);
// invoke
$car->drive();
}
}
如果你使用的是早期版本的 PHPUnit,則可以使用方法 setExpectedException 代替 expectX()
方法,但請記住它已棄用,將在版本 6 中刪除。
class DriveTest extends PHPUnit_Framework_TestCase
{
public function testDrive()
{
// prepare
$car = new \Car();
$expectedClass = \Exception::class;
$expectedMessage = 'Useful message';
$expectedCode = 1;
// test
$this->setExpectedException($expectedClass, $expectedMessage, $expectedCode);
// invoke
$car->drive();
}
}