В большинстве моих приложений у меня есть одноэлементный или статический объект «config», отвечающий за чтение различных настроек с диска. Почти все классы используют его для различных целей. По сути, это просто хеш-таблица пар имя / значение. Это только для чтения, поэтому меня не слишком беспокоит тот факт, что у меня так много глобального состояния. Но теперь, когда я начинаю с модульного тестирования, это начинает становиться проблемой.
Одна проблема заключается в том, что вы обычно не хотите тестировать с той же конфигурацией, с которой вы работаете. Есть несколько решений для этого:
- Дайте объекту конфигурации установщик, который используется ТОЛЬКО для тестирования, чтобы вы могли передавать различные настройки.
- Продолжайте использовать один объект конфигурации, но измените его с одиночного на экземпляр, который вы передаете везде, где это необходимо. Затем вы можете создать его один раз в своем приложении и один раз в своих тестах с различными настройками.
Но в любом случае, у вас все еще есть вторая проблема: почти любой класс может использовать объект конфигурации. Поэтому в тесте вам нужно настроить конфигурацию для тестируемого класса, а также ВСЕ его зависимости. Это может сделать ваш тестовый код безобразным.
Я начинаю приходить к выводу, что такого рода объект конфигурации является плохой идеей. Что вы думаете? Какие есть альтернативы? И как начать рефакторинг приложения, которое везде использует конфигурацию?