PHPUnit не перехватывает ожидаемые исключения - PullRequest
6 голосов
/ 11 ноября 2010

У меня есть набор тестов, и я хочу проверить, что мои классы выдают исключения в нужное время.В этом примере мой класс использует магический метод __get (), поэтому мне нужно проверить, что возникает исключение при получении неверного свойства:

function testExceptionThrownWhenGettingInvalidProperty() {
  $obj = new MyClass();
  $this->setExpectedException("Property qwerty does not exist");
  $qwerty = $obj->qwerty;
}

Класс выдает ошибку, как и должно,вместо того, чтобы просто получить пропуск, исключение не ловится!

There was 1 error:

1) QueryTest::testExceptionThrownWhenGettingInvalidProperty
Exception: Property qwerty does not exist

Я раньше использовал SimpleTest, и $this->expectException(new Exception("Property qwerty does not exist")); работал просто отлично.Я знаю, что есть другие методы (@expectedException и try-catch), но этот должен работать, и он выглядит намного чище.Любые идеи, как я могу сделать эту работу?

Ответы [ 2 ]

13 голосов
/ 12 ноября 2010

Добавляя к ответу ircmaxell, на самом деле есть более простой способ сделать это:

/**
 * @expectedException MyExceptionClass
 * @expectedExceptionMessage Array too small
 */
public function testSomething()
{
}

@expectedException имя класса ожидаемого исключения, а @expectedExceptionMessage является подстрокой исключенияожидаемое сообщение (верно, вам не нужно иметь полное сообщение).

Если вы предпочитаете не использовать аннотации docblock, оба они фактически доступны в качестве методов в тестовом примере.

13 голосов
/ 11 ноября 2010

Он не ищет текст в исключении, он ищет имя класса исключения ... Документы

$this->setExpectedException('Exception');

Это очень удобно, когда вы используете Исключения SPL или пользовательские классы исключений ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...