Как использовать setExpectedException() PHPUnit?

С помощью PHPUnit я могу успешно проверить, правильно ли конкретный вызов класса выдает такое исключение:

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");

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

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

Но как мне заставить его работать, как в приведенном выше примере, то есть я хочу проверить, что класс выдает это исключение только когда я делаю конкретный вызов с «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() для замены приведенного выше рабочего примера?


person Edward Tanguay    schedule 10.01.2011    source источник
comment
Ваш второй пример правильный. Можете ли вы указать, что не работает.   -  person Gordon    schedule 10.01.2011
comment
$this->setExpectedException('Exception'); throw new Exception(); -- что, если вы выполните этот код?   -  person zerkms    schedule 10.01.2011
comment
Это действительно работает, как во втором примере, спасибо.   -  person Edward Tanguay    schedule 10.01.2011
comment
тогда следуйте этому шаблону: а) задайте ожидания б) запустите тестовые методы в) ПРИБЫЛЬ!!!1 ;-)   -  person zerkms    schedule 10.01.2011
comment
Вы также можете использовать аннотацию комментария. phpunit.de/manual/current/en/   -  person joksnet    schedule 10.01.2011


Ответы (1)


Вы можете использовать аннотация ожидаемого исключения:

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

    }
}
person ts.    schedule 10.01.2011
comment
Подождите, это решает проблему? Я думал, что OP обеспокоен получением ложных срабатываний от исключений, вызванных кодом, отличным от вызова BAD_NAME. Аннотация не сужает это. - person DSimon; 25.01.2013