测试异常
假设你要测试抛出异常的方法
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();
}
}