2011-01-10 3 views
4

С PHPUnit я могу успешно протестировать если конкретный вызов к классу правильно бросает исключение, как это:Как использовать PHPUnit setExpectedException()?

try 
{ 
    $dummy = Import_Driver_Excel::get_file_type_from_file_name('BAD_NAME.nnn'); 
} 
catch (Exception $ex) 
{ 
    return; 
} 
$this->fail("Import_Driver_Excel::get_file_type_from_file_name() does not properly throw an exception"); 

Но я читал here, что есть простой способ, в основном в одной строке с помощью setExpectedException() :

class ExceptionTest extends PHPUnit_Framework_TestCase 
{ 
    public function testException() 
    { 
     $this->setExpectedException('InvalidArgumentException'); 
    } 
} 

Но как мне заставить его работать, как в приведенном выше примере, то есть я хочу, чтобы проверить, что класс выдает это исключение только тогда, когда я м ake конкретный вызов с 'BAD_NAME.nnn'? Эти варианты не работают:

$dummy = Import_Driver_Excel::get_file_type_from_file_name('BAD_NAME.nnn'); 
$this->setExpectedException('Exception'); 

, ни это:

$this->setExpectedException('Exception'); 
$dummy = Import_Driver_Excel::get_file_type_from_file_name('BAD_NAME.nnn'); 

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

+5

Ваш второй пример является правильным. Можете ли вы указать, что не работает. – Gordon

+0

'$ this-> setExpectedException ('Исключение'); throw new Exception(); '- что делать, если вы выполняете этот код? – zerkms

+0

Это действительно работает, как во втором примере, спасибо. –

ответ

0

Вы можете использовать expectedException annotation:

class ExceptionTest extends PHPUnit_Framework_TestCase 
{ 
    /** 
    * @expectedException InvalidArgumentException 
    */ 
    public function testException() 
    { 
     $dummy = Import_Driver_Excel::get_file_type_from_file_name('BAD_NAME.nnn'); 

    } 
} 
+9

Подождите, это решит проблему? Я думал, что OP беспокоится о том, чтобы получить ложные срабатывания от исключений, вызванных кодом, отличным от вызова BAD_NAME. Аннотации не ограничивают это. – DSimon

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