Представьте, что вы разрабатываете какое-то устаревшее приложение и должны использовать глобальные переменные. Как вы можете выполнять модульные тесты, поддерживая использование глобальных переменных?

В этом посте я дам вам несколько идей о том, как вы можете это сделать.

Оставайтесь со мной, и если вы можете оставить комментарий, расскажите мне, что вы делаете для решения этой проблемы.

Статические методы

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

Обратите внимание, что первый вариант позволяет вам не вносить изменения в исходный код.

Это может быть хорошо.

Но внедрение делает реализацию более гибкой.

Объявление глобальной переменной

Вы можете в модульном тесте объявить глобальную переменную.

Таким образом, тестируемый код останется прежним, и его не нужно будет менять.

Внедрение как необязательный параметр

Если вы тестируете статические методы и у вас нет экземпляра, вы можете добавить новый необязательный параметр с переменной.

Затем вы можете добавить следующую проверку в первую строку статического метода:

Таким образом, в модульном тесте вы предоставляете переменную без необходимости объявлять глобальную.

Методы экземпляра

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

Глобальная переменная теперь является новым свойством экземпляра и отвечает за создание экземпляра класса для предоставления этих данных.

Каково твое мнение? Что ты предпочитаешь?

Второй вариант, если он доступен, с методами экземпляра, внедрением через методы конструктора или установщика всех зависимостей, является предпочтительным подходом.

Таким образом, позже все зависимости могут быть предоставлены без необходимости изменения реализации.

Конечно, в идеале следует отказаться от использования глобальных переменных, но в некоторых кодовых базах это непростая задача.

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