Я серьезно думаю, что это запах кода, если вам нужно высмеивать и статические методы.
- Статические методы для доступа к общей функциональности? -> Используйте экземпляр Singleton и введите
- Сторонний код? -> Оберните его в свой собственный интерфейс / делегат (и при необходимости сделайте его тоже одиночным)
Единственный раз, когда это кажется мне излишним, это библиотеки вроде Guava, но вам не нужно все равно издеваться над этим, потому что это часть логики ... (например, Iterables.transform (..))
Таким образом, ваш собственный код остается чистым, вы можете смоделировать все ваши зависимости в чистом виде, и у вас есть антикоррупционный слой против внешних зависимостей. Я видел PowerMock на практике, и все классы, для которых он был нужен, были плохо спроектированы. Также временами интеграция PowerMock вызывала серьезные проблемы
(например, https://code.google.com/p/powermock/issues/detail?id=355 ).
PS: То же самое касается и частных методов. Я не думаю, что тесты должны знать о деталях частных методов. Если класс настолько сложен, что возникает соблазн издеваться над частными методами, это, вероятно, признак разделения этого класса ...