Stiamo cercando di progettare il nostro sistema in modo che sia testabile e nella maggior parte dei casi sviluppato utilizzando TDD. Attualmente stiamo cercando di risolvere il seguente problema:
In vari luoghi è necessario per noi utilizzare metodi di supporto statici come ImageIO e URLEncoder (entrambe le API Java standard) e varie altre librerie che consistono principalmente di metodi statici (come le librerie Apache Commons). Ma è estremamente difficile testare quei metodi che usano tali classi di supporto statiche.
Ho diverse idee per risolvere questo problema:
- Utilizzare un framework simulato in grado di deridere classi statiche (come PowerMock). Questa potrebbe essere la soluzione più semplice ma in qualche modo sembra di rinunciare.
- Crea classi wrapper istantanee attorno a tutte quelle utility statiche in modo che possano essere iniettate nelle classi che le usano. Sembra una soluzione relativamente pulita ma temo che finiremo per creare moltissime classi di wrapper.
- Estrai ogni chiamata a queste classi di supporto statiche in una funzione che può essere ignorata e testa una sottoclasse della classe che voglio testare.
Ma continuo a pensare che questo debba essere solo un problema che molte persone devono affrontare quando fanno TDD - quindi ci devono essere già soluzioni per questo problema.
Qual è la migliore strategia per mantenere testabili le classi che usano questi helper statici?