Staramy się zaprojektować nasz system w taki sposób, aby był testowalny i w większości został opracowany przy użyciu TDD. Obecnie próbujemy rozwiązać następujący problem:
W różnych miejscach konieczne jest stosowanie metod statycznego pomocnika, takich jak ImageIO i URLEncoder (oba standardowe API Java) oraz różnych innych bibliotek, które składają się głównie z metod statycznych (takich jak biblioteki Apache Commons). Jednak niezwykle trudno jest przetestować metody wykorzystujące takie statyczne klasy pomocnicze.
Mam kilka pomysłów na rozwiązanie tego problemu:
- Użyj fałszywego frameworka, który potrafi drwić z klas statycznych (np. PowerMock). To może być najprostsze rozwiązanie, ale w jakiś sposób wydaje się, że trzeba się poddać.
- Utwórz natychmiastowe klasy opakowań wokół wszystkich tych narzędzi statycznych, aby można je było wstrzykiwać do klas, które ich używają. To brzmi jak stosunkowo czyste rozwiązanie, ale obawiam się, że skończymy z tworzeniem okropnej liczby tych klas opakowań.
- Wyodrębnij każde wywołanie tych statycznych klas pomocniczych do funkcji, którą można zastąpić, i przetestuj podklasę klasy, którą faktycznie chcę przetestować.
Ale ciągle myślę, że to musi być problem, z którym wiele osób musi się zmierzyć podczas TDD - więc muszą już być rozwiązania tego problemu.
Jaka jest najlepsza strategia umożliwiająca testowanie klas korzystających z tych statycznych pomocników?