測試異常

假設你要測試丟擲異常的方法

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();
    }
}