Для проверки бросил ли тестируемый код необходимое исключение (exception) в PHPUnit есть аннотация @expectedException.
Приведём пример.
Тестируемый код:
<?php // src/ExampleProject/Controller.php namespace ExampleProject; class Controller { /** * @param array $data * @throws \Exception */ public function indexAction(array $data) { if (!isset($data['var'])) { throw new \Exception('Error: var param is not defined', 101); } } }
Код теста:
<?php // tests/ExampleProject/ControllerTest.php namespace Tests\ExampleProject; use PHPUnit\Framework\TestCase; use ExampleProject\Controller; class ControllerTest extends TestCase { /** * @expectedException \Exception */ public function testIndexAction() { $controller = new Controller(); $controller->indexAction(['test']); } }
Также можно проверить сообщение и код исключения с помощью аннотаций @expectedExceptionMessage и @expectedExceptionCode:
<?php // tests/ExampleProject/ControllerTest.php namespace Tests\ExampleProject; use PHPUnit\Framework\TestCase; use ExampleProject\Controller; class ControllerTest extends TestCase { /** * @expectedException \Exception * @expectedExceptionCode 101 * @expectedExceptionMessage Error: var param is not defined */ public function testIndexAction() { $controller = new Controller(); $controller->indexAction(['test']); } }