2016-05-04 7 views
3

У меня есть контроллер Symfony, использующий try ... catch. Я использую phpunit для проверки моего приложения. Я искал, но havent нашел способ, как проверить код внутри исключения catch. Как я могу заставить блок php притвориться, что что-то пошло не так, и входит в блок catch и также проверяет это?PHPUnit тестовый код внутри блока catch

т.е.

try { 
     $foo = 1; 
    } catch (\Exception $ex) { 
     $mail = new Mail(); 
     $mail->sendMail(); 
     return new Response(); 
    } 

Как я могу сказать, PHPUnit бросить \ Exception, так что будет проверять код внутри блока улова выше?

+1

Если ваш контроллер выдает исключение на некоторых условиях, и вы хотите проверить его, просто имитируйте эти условия. – Federkun

+0

Да, вы можете создать те условия, в которых ваш код создаст исключение. – Aparna

+0

Какой код у вас там есть? Необходимо что-то, что вызывает исключение в реальном приложении. И вам нужно высмеять эту часть, чтобы выбросить исключение. Тем не менее, было бы хорошо, если бы вы могли показать нам код. –

ответ

1

Ну, в этих условиях он, очевидно, не выдаст никаких исключений, но рассмотрит функцию, в которой находится ваша попытка/улов. Вам нужно выполнить модульную проверку этой функции и предоставить аргументы, которые приведут к сбою и улову.

Например:

public function doStuff($argument) { 
    try { 
     $parsed = (int)$argument; //but what if $argument is a string with letters 
    } catch (\Exception $ex) { 
     //do stuff 
    } 

Чтобы проверить, что исключение, когда вы запутались его:

public function testDoStuff() { 
    // get a mock of the class, let's just call it $mock 
    // do some regular asserts if you want 

    $this->setExpectedException('\Exception'); 
    $mock->doStuff('haha, you can't parse this'); 
} 
0

Если у вас действительно есть некоторые сложные вещи в вашем catch блоке вы можете переместить его в отдельный защищенный метод контроллера и протестировать его отдельно. Вы можете легко получить доступ к защищенному методу вне своего класса, используя отражение.

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

  • Нет связанных вопросов^_^