Как я могу сделать вывод сообщений в журнал ошибок с помощью PHPUnit?

В этот ответ упоминается использование expectOutputString() чтобы ожидать выходных строк в PHPUnit. Мне также нужно сделать своего рода аналог этого, который должен сказать макету для вывода строки. Я ранее использовал $mock->will($this->throwException(Exception('foo')) чтобы мой макет генерировал исключение, но теперь вместо того, чтобы генерировать исключение, мне нужно, чтобы он регистрировал ошибку, а НЕ повторно выбрасывал исключение, а это значит, что мне нужно, чтобы мой макет выводил строку так же, как error_log() делает в методе, который я пытаюсь смоделировать, так что мой тест может ожидать строку.

Имеет ли это смысл? Можно ли это сделать? PHPUnit предлагает способ сделать это?

0

Решение

С точки зрения тестируемости всегда лучше абстрагировать запись ошибок в класс. Если вы делаете прямые звонки error_log() у вас будут трудности с проверкой сделанных звонков.

Если вы не можете рефакторинг ваш код и использовать класс для регистрации ошибок, вы можете попытаться установить специальный обработчик ошибок, который будет хранить сообщения в каком-то месте, а затем проверить эти сообщения во время теста после соответствующего вызова.

Но если ты можешь, лучше создать класс с методами, которые абстрагируют собственный лог ошибок php. Этот класс будет зависимостью тестируемого класса. Вы можете либо передать его в качестве обязательного аргумента конструктора, либо сделать так, чтобы класс создал его автоматически, но позволил установить его внешне. Очевидно, что в тесте вы вводите макет этого класса «ErrorLogger» с ожиданиями

2

Другие решения

Других решений пока нет …