модульное тестирование и статические методы

Читаю и разбираюсь в модульном тестировании, пытаюсь понять следующий пост , в котором объясняются трудности статических вызовов функций.

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

Init::loadConfig('settings.php');
Init::setErrorHandler(APP_MODE); 
Init::loggingMode(APP_MODE);

// start loading app related objects ..
$app = new App();

// После прочтения поста я теперь стремлюсь к этому ...

$init = new Init();
$init->loadConfig('settings.php');
$init->loggingMode(APP_MODE);
 // etc ...

Но несколько десятков тестов, которые я написал для этого класса, являются те же самые. Я ничего не менял, и все они проходят. Я что-то делаю не так?

Автор сообщения заявляет следующее:

Основная проблема статических методов заключается в том, что они представляют собой процедурный код. Я понятия не имею, как проводить модульное тестирование процедурного кода. Модульное тестирование предполагает, что я могу создать экземпляр своего приложения изолированно. Во время создания экземпляра я связываю зависимости с mocks / Friendly, которые заменяют реальные зависимости. При процедурном программировании нечего «связывать», поскольку нет объектов, код и данные разделены.

Теперь я понимаю из сообщения, что статические методы создают зависимости, но не понимают интуитивно, почему нельзя проверить Возвращает значение статического метода так же легко, как и обычного метода?

Я буду избегать статических методов, но мне хотелось бы иметь представление о том, КОГДА статические методы полезны, если вообще полезны. Из этого поста кажется, что статические методы так же опасны, как и глобальные переменные, и их следует избегать как можно больше.

Любая дополнительная информация или ссылки по этому поводу были бы очень признательны.

43
задан hakre 20 December 2012 в 20:25
поделиться