2015-03-05 7 views
3

Я немного спотыкаюсь найти способ проверить, что мой обработчик исключений вызывается при вызове Exception.Как протестировать обработчик исключений с помощью 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

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

ответ

1

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

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

Sets the default exception handler if an exception is not caught within a try/catch block.

С phpspec ловит все исключения ваш тестовый код бросками, обработчик исключений установки не имеет возможности работать :-(

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

+0

Спасибо за ваш ответ. Я схожу с ума, пытаясь найти решение этой проблемы. в то время как ответ разочарование, он предложит мне найти а, для решения этой проблемы. –

+0

Здесь есть два аспекта: во-первых, вы хотите проверить, что обработчик исключений выполняет свою работу должным образом. Вы можете использовать 'phpspec' или другой инструмент тестирования, чтобы проверить поведение функции обработчика, вызвав его напрямую с правильным аргументом. Во-вторых, проверенный вами тест проверяет правильность установки обработчика. Установка его не должна отвечать самому классу «Клиент». Он должен быть частью бутстрапа приложения на том же уровне, что и установка автоматической загрузки. И вы можете просто положиться на то, что PHP вызовет ваш обработчик, если он установлен. – axiac

Смежные вопросы