异常
在测试 PHP 中的行为时,您可能需要检查是否抛出了异常或错误。要创建一个期望抛出异常的测试,您可以使用 throws()
方法。
1it('throws exception', function () {2 throw new Exception('Something happened.');3})->throws(Exception::class);
如果您还想对异常消息进行断言,可以向 throws()
方法提供第二个参数。
1it('throws exception', function () {2 throw new Exception('Something happened.');3})->throws(Exception::class, 'Something happened.');
如果异常类型不相关,而您只关心消息,则可以只传递消息而不指定异常的类型。
1it('throws exception', function () {2 throw new Exception('Something happened.');3})->throws('Something happened.');
您可以使用 throwsIf()
方法在给定布尔表达式计算结果为 true 时有条件地验证异常。
1it('throws exception', function () {2 //3})->throwsIf(fn() => DB::getDriverName() === 'mysql', Exception::class, 'MySQL is not supported.');
就像 throwsIf()
方法一样,您可以使用 throwsUnless()
方法在给定布尔表达式计算结果为 false 时有条件地验证异常。
1it('throws exception', function () {2 //3})->throwsUnless(fn() => DB::getDriverName() === 'mysql', Exception::class, 'Only MySQL is supported.');
您还可以使用期望 API 的 toThrow() 方法验证给定的闭包是否抛出一个或多个异常。
1it('throws exception', function () {2 expect(fn() => throw new Exception('Something happened.'))->toThrow(Exception::class);3});
如果您期望不抛出任何异常,则可以使用 throwsNoExceptions()
方法。
1it('throws no exceptions', function () {2 $result = 1 + 1;3})->throwsNoExceptions();
有时,您可能只想将测试标记为失败。您可以使用 fail()
方法执行此操作。
1it('fail', function () {2 $this->fail();3});
您也可以向 fail()
方法提供消息。
1it('fail', function () {2 $this->fail('Something went wrong.');3});
此外,您还可以使用 fails()
方法验证测试是否失败。
1it('fails', function () {2 throw new Exception('Something happened.');3})->fails();
就像 fail()
方法一样,您也可以向 fails()
方法提供消息。
1it('fails', function () {2 throw new Exception('Something happened.');3})->fails('Something went wrong.');
在学习了如何编写断言异常的测试后,下一步是探索“测试过滤”。此功能允许您根据测试名称、脏文件等条件有效地运行特定测试:过滤测试 →