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