Как справиться с ошибочным утверждением PHP с помощью PHPUnit? - PullRequest
2 голосов
/ 20 сентября 2011

У меня есть утверждение в моем коде. Что-то вроде:

assert('is_string($var)');

Если я напишу тест для PHPUnit, который приводит к ошибке этого утверждения с сообщением, Warning: assert(): Assertion "is_string($var)" failed in /path/to/file.php on line ###

И мой тест тоже не пройден. Я пытался добавить @expectedException PHPUnit_Framework_Error_Warning в докблок в соответствии с документацией , но это не помогает. Что мне нужно сделать, чтобы мой тест ожидал, что это утверждение не будет выполнено?

Ответы [ 2 ]

7 голосов
/ 20 сентября 2011

С php.net / assert :

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

Утверждения не должны использоваться для обычных операций во время выполнения, таких как проверки входных параметров . Как правило, ваш код всегда должен работать правильно, если проверка утверждений не активирована.

Так что для нормальной логики кода используйте логическое значение или несколько предопределенных констант. Для исключительной логики используйте нормальные операторы if и бросьте Exception для неверного ввода.

Если вы действительно заинтересованы в сохранении утверждений, вы можете определить обратный вызов assert, который выдает Exception, который вы можете поймать в PHPUnit.

// PHP 5.3 Anonymous function as callback
// code is untested
assert_options(ASSERT_CALLBACK, function($file, $line, $code) {
    throw new Exception('Assert failed in $file on line $line');
});
0 голосов
/ 20 сентября 2011

Утверждения должны проваливаться только при сбое теста.

...