У меня есть класс, который использует шаблон Chain of Responsibility. В двух словах, при определенных условиях, если вызывается один из его методов, он передает вызов одному и тому же методу преемника (он и преемник используют один и тот же интерфейс).
Пример:
catch(PDOException $exception)
{
if(isset($this->successor))
{
$this->successor->log($log);
}
}
Обычно, если преемник был установлен, ему дается вызов. Если нет, то ничего не происходит.
В данный момент в моем модульном тесте у меня есть два теста: в одном из них установлен преемник, и метод вызывается при правильных условиях для запуска вызова преемника. Преемник - это макет, и я могу проверить, что вызывается правильный метод.
Теперь, перед написанием оператора if
, я продублировал тот же тест, но удалил код, который устанавливает объект-преемник. Когда я запускаю тест, не удивительно, что тест останавливается с ошибкой, потому что SUT пытается вызвать метод для объекта, который не существует.
Когда я реализую код (как выше), все тесты проходят нормально.
Хотя я несчастен. Я следую методологии TDD и хочу, чтобы я смог увидеть неудачный тест, прежде чем писать код, а не ошибку.
Как я могу провести рефакторинг, чтобы я мог сначала пройти неудачный тест вместо ошибки?