Wir versuchen, unser System so zu gestalten, dass es testbar ist und größtenteils mit TDD entwickelt wird. Derzeit versuchen wir das folgende Problem zu lösen:
An verschiedenen Stellen müssen statische Hilfsmethoden wie ImageIO und URLEncoder (beide Standard-Java-API) sowie verschiedene andere Bibliotheken verwendet werden, die hauptsächlich aus statischen Methoden bestehen (wie die Apache Commons-Bibliotheken). Es ist jedoch äußerst schwierig, Methoden zu testen, die solche statischen Hilfsklassen verwenden.
Ich habe verschiedene Ideen, um dieses Problem zu lösen:
- Verwenden Sie ein Mock-Framework, das statische Klassen verspotten kann (wie PowerMock). Dies mag die einfachste Lösung sein, aber irgendwie fühlt es sich an, als würde man aufgeben.
- Erstellen Sie instanziierbare Wrapper-Klassen für alle diese statischen Dienstprogramme, damit sie in die Klassen eingefügt werden können, die sie verwenden. Das klingt nach einer relativ sauberen Lösung, aber ich befürchte, wir werden am Ende eine Menge solcher Wrapper-Klassen erstellen.
- Extrahieren Sie jeden Aufruf dieser statischen Hilfsklassen in eine Funktion, die überschrieben werden kann, und testen Sie eine Unterklasse der Klasse, die ich tatsächlich testen möchte.
Aber ich denke immer wieder, dass dies nur ein Problem sein muss, mit dem viele Menschen bei TDD konfrontiert sind - daher muss es bereits Lösungen für dieses Problem geben.
Was ist die beste Strategie, um Klassen, die diese statischen Helfer verwenden, testbar zu halten?