En serio, creo que es olor a código si también necesitas burlarte de los métodos estáticos.
- ¿Métodos estáticos para acceder a funcionalidades comunes? -> Use una instancia singleton e inyecte eso
- Código de terceros? -> Envuélvelo en tu propia interfaz / delegado (y si es necesario, conviértelo también en singleton)
La única vez que esto me parece excesivo es libs como Guava, pero de todos modos no deberías necesitar burlarte de este tipo porque es parte de la lógica ... (cosas como Iterables.transform (..)) De
esa manera tu propio código se mantiene limpio, puede burlarse de todas sus dependencias de manera limpia y tiene una capa anticorrupción contra dependencias externas. He visto PowerMock en la práctica y todas las clases para las que lo necesitábamos estaban mal diseñadas. Además, la integración de PowerMock a veces causó serios problemas
(por ejemplo, https://code.google.com/p/powermock/issues/detail?id=355 )
PD: Lo mismo vale para los métodos privados, también. No creo que las pruebas deban conocer los detalles de los métodos privados. Si una clase es tan compleja que tienta a burlarse de métodos privados, probablemente sea una señal de dividir esa clase ...