W większości moich aplikacji mam singleton lub statyczny obiekt „config”, który odpowiada za odczytywanie różnych ustawień z dysku. Prawie wszystkie klasy używają go do różnych celów. Zasadniczo jest to tylko tablica skrótów par nazwa / wartość. Jest tylko do odczytu, więc nie martwiłem się zbytnio faktem, że mam tak dużo globalnego stanu. Ale teraz, gdy zaczynam od testowania jednostkowego, zaczyna to stanowić problem.
Jednym z problemów jest to, że zwykle nie chcesz testować z tą samą konfiguracją, z którą korzystasz. Istnieje kilka rozwiązań tego:
- Daj obiektowi konfigurującemu narzędzie, które TYLKO jest używane do testowania, abyś mógł przekazać inne ustawienia.
- Kontynuuj korzystanie z pojedynczego obiektu konfiguracji, ale zmień go z singletonu na instancję przekazywaną wszędzie tam, gdzie jest to potrzebne. Następnie możesz zbudować go raz w aplikacji i raz w testach, z różnymi ustawieniami.
Ale tak czy inaczej, nadal masz drugi problem: prawie każda klasa może korzystać z obiektu config. Tak więc w teście musisz skonfigurować konfigurację testowanej klasy, ale także WSZYSTKIE jej zależności. Może to spowodować, że kod testowy będzie brzydki.
Zaczynam dochodzić do wniosku, że tego rodzaju obiekt konfiguracji to zły pomysł. Co myślisz? Jakie są alternatywy? Jak rozpocząć refaktoryzację aplikacji używającej konfiguracji wszędzie?