У більшості моїх програм у мене є однотонний або статичний "конфігураційний" об'єкт, який відповідає за зчитування різних налаштувань з диска. Майже всі класи використовують його для різних цілей. По суті це просто хеш-таблиця пар імен / значень. Це лише для читання, тому я не надто переймався тим, що у мене стільки глобального стану. Але тепер, коли я починаю з тестування одиниць, це починає ставати проблемою.
Одна проблема полягає в тому, що ви зазвичай не хочете тестувати з тією ж конфігурацією, з якою ви працюєте. Є кілька рішень для цього:
- Надайте об’єкту конфігурації сетер, який використовується ТІЛЬКИ для тестування, щоб ви могли пройти в різних налаштуваннях.
- Продовжуйте використовувати один конфігураційний об'єкт, але змініть його з однотонного на екземпляр, який ви обходите всюди, де це потрібно. Тоді ви можете сконструювати це один раз у вашій програмі та один раз у ваших тестах, з різними налаштуваннями.
Але в будь-якому випадку, у вас все ще залишається друга проблема: практично будь-який клас може використовувати об’єкт config. Тож у тесті потрібно встановити конфігурацію для тестуваного класу, а також ВСІ його залежності. Це може зробити ваш тестовий код некрасивим.
Я починаю робити висновок, що такий тип конфігураційного об’єкта - це погана ідея. Що ти думаєш? Які існують альтернативи? І як почати рефакторинг програми, яка всюди використовує конфігурацію?