Чтение и сбор данных на модульном тестировании, пытаясь понять следующее сообщение, в котором объясняются трудности статических вызовов функций.
Я не понимаю этого. Я всегда считал, что статические функции были хорошим способом округления функций полезности в классе. Например, я часто использую вызовы статических функций для инициализации, то есть:
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 ...
Но, несколько десятков тестов, которые я написал для этого класса, одинаковы. Я ничего не изменил, и они все еще проходят. Я что-то делаю неправильно?
Автор сообщения утверждает следующее:
Основная проблема со статическими методами - это процедурный код. Я понятия не имею, как модульный код с модульным тестированием. Unit-testing предполагает, что я могу создать экземпляр части приложения отдельно. Во время создания я связываю зависимости с mocks/friendlies, которые заменяют реальные зависимости. При процедурной программировании ничего не нужно "прокладывать", поскольку нет объектов, код и данные являются отдельными.
Теперь, я понимаю из сообщения, что статические методы создают зависимости, но не понимают интуитивно, почему невозможно проверить возвращаемое значение статического метода так же легко, как обычный метод?
Я буду избегать статических методов, но мне понравилось бы иметь представление о КОГДА статические методы полезны, если вообще. Похоже, что этот пост статические методы почти так же злы, как и глобальные переменные, и их следует избегать как можно больше.
Приветствуется любая дополнительная информация или ссылки на эту тему.