Как протестировать обработчик исключений с помощью phpspec

Я немного спотыкаюсь, пытаясь найти способ проверить, что мой обработчик исключений вызывается при вызове исключения.

Это идея, с которой я изначально работал для тестирования:

class ClientSpec extends ObjectBehavior
{
function it_should_catch_exceptions(Config $config)
{
$e = new Exception('test exception');
$this->catchException($e)->shouldBeCalled();
throw $e;
}
}

Client есть метод catchException который будет установлен как обработчик исключений через set_exception_handler: http://php.net/set_exception_handler.

Запуск этого теста дает мне эту обратную связь: no beCalled([array:0]) matcher found for nullпоэтому я также попытался создать спецификацию для Exception и сделайте следующее:

class ExceptionSpec extends ObjectBehavior
{
function it_should_trigger_opbeat_client_when_thrown(Client $client)
{
$client->catchException($this)->shouldBeCalled();
throw $this->getWrappedObject();
}
}

Но выполнение этого теста возвращает еще одну ошибку: exception [exc:Exception("")] has been thrown

Как я могу проверить, что мой обработчик исключений называется?

4

Решение

Боюсь, вы не можете протестировать обработчик исключений, используя phpspec, PHPUnit или другой подобный инструмент тестирования, потому что они оборачивают тест, который вы пишете в try-catch заблокировать, чтобы поймать любое необнаруженное исключение и сообщить о нем.

С другой стороны, документация set_expection_handler() говорит:

Устанавливает обработчик исключений по умолчанию, если исключение не перехвачено в блоке try / catch.

поскольку phpspec ловит все исключения, которые выдает ваш тестовый код, у установленного вами обработчика исключений нет шансов на запуск 🙁

Я думаю, что все неисследованные исключения заканчивают свое приключение в ExampleRunner.php в строке 96

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]