2013-07-27 2 views
0

Я хочу проверить, если метод вызывает исключение. Это метод:Исключения в PHPunit не работают

public function divide($a,$b) 
{  
    try 
    { 
     if($b==0){ 
     throw new Exception('Divided by zero'); 
     }else{ 
     return $a/$b;  
     } 
    } 
    catch(exception $e) 
    { 
     return $e; 
    } 
} 

и это испытание:

/** 
* @expectedException Exception 
*/ 
public function testException() 
{ 
    //throw new Exception('Hello world'); 
    $this->calculator->divide(10,0)); 
} 

Если я проверить код в браузере, исключение поднята. Но когда я запускаю тест, я всегда получаю сообщение «Failed asserting that exception of type Exception is throw». Однако, если я создаю исключение внутри метода тестирования (раскомментирую линию броска), тест работает отлично.

Любые подсказки?

Я использую phpunit 3.7, xampp 3.1, поверх Windows XP.

+0

Вы перехватываете исключение в методе, чтобы он не пузырился. – PeeHaa

ответ

2

Потому что Exception находится внутри функции. Вы не позволяете этому пузыриться. Поэтому тест не будет его утверждать.

public function divide($a, $b) 
{ 
    if ($b == 0) { 
     throw new Exception('Divided by zero'); 
    } else { 
     return $a/$b; 
    } 
} 
+0

Вы правы. Я проверил, если исключение запускается внутри блока try/catch, оно не будет захвачено phpunit, поэтому я откажусь от проверки исключений обработанных обработок. Благодаря! –

+0

@JorgeHernandez: Если этот вопрос решил вашу проблему, пожалуйста, подумайте о том, чтобы принять его, нажав на большой зеленый галочку (✔) под вопросом. –

+0

В прошлом мне не удалось заставить PHPUnit уловить исключения по умолчанию, но будет сообщать о пользовательских исключениях. IE: expectedException Exception не работает, но ожидается Exception MyExeception. –