Stiamo provando a progettare il nostro sistema affinché sia testabile e nella maggior parte delle parti sviluppato utilizzando TDD. Attualmente stiamo cercando di risolvere il seguente problema:
In vari punti è necessario per noi utilizzare metodi di helper statici come ImageIO e URLEncoder (entrambe le API Java standard) e varie altre librerie che consistono principalmente di metodi statici (come le librerie di Apache Commons). Ma è estremamente difficile testare quei metodi che usano queste classi di helper statiche.
Ho diverse idee per risolvere questo problema:
- Utilizzare un framework di simulazione che possa prendere in giro classi statiche (come PowerMock). Questa potrebbe essere la soluzione più semplice, ma in qualche modo è come rinunciare.
- Crea classi wrapper istanziabili attorno a tutte quelle utility statiche in modo che possano essere iniettate nelle classi che li utilizzano. Sembra una soluzione relativamente pulita, ma temo che finiremo per creare un sacco di quelle classi wrapper.
- Estrai ogni chiamata a queste classi di helper statiche in una funzione che può essere sovrascritta e testare una sottoclasse della classe che in realtà voglio testare.
Ma continuo a pensare che questo deve essere 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 le classi che utilizzano questi helper statici testabili?