Есть ли способ запустить тест на выходе, созданный при вызове 'error_log («Сообщение») при выполнении модульных тестов с помощью phpunit?Есть ли способ «ожидать» вывода для error_log в тестах PHPUnit?
Пример кода, один из моих функций проверяет кредитную карту с помощью алгоритма Лун:
if($checkLuhn && ($this->_luhn_check($cardNumber) == false)) {
error_log(__METHOD__ . " cardNumber failed luhn algorithm check.");
return false;
}
$ checkLuhn является булевой прошло, чтобы сказать ему, делать ли чек, то _luhn_check() возвращает истину, если пробегает $ cardNumber. Проблема в том, что у меня есть более одного теста в этой функции, который может возвращать false. Я могу использовать assertEquals для возвращаемого значения, но также хочу проверить, почему была выбрана ошибка.
Можете ли вы переопределить error_log или иначе захватить вывод syslog в модульном тесте?
Есть ли в вашем '$ this -> _ luhn_check ($ cardNumber) исключение? Если это так, вы можете получить это исключение и зарегистрировать его в своем тесте. – Jhn
Я думаю, что у вас отсутствует некоторый уровень абстракции при обнаружении/регистрации ошибок. Если вы используете класс для регистрации всех ошибок, вам просто нужно высмеять этот класс в своих тестах. Затем вы также проверите этот класс, чтобы проверить, что работает как ожидалось. Что вы хотите проверить здесь, так это то, что ошибка запускается, а не то, что происходит при возникновении ошибки. – gontrollez
Я согласен с @gontrollez, регистрация должна обязательно быть абстрагирована из кода и представлена как услуга. Вы сможете писать лучшие (и более простые) тесты, плюс вы получите большую гибкость и сможете писать более одного журнала. –