Имитация статических методов

Когда я провел некоторое исследование, я обнаружил, что PowerMock может издеваться над статическими методами Java.

Может ли кто-нибудь объяснить (технически), чем PowerMock отличается от JUnit и других, которые не могут или не могут? А также почему статические методы вызывают проблемы, когда их пытаются имитировать?

спасибо


person add9    schedule 23.03.2011    source источник


Ответы (1)


http://blog.jayway.com/2009/05/17/mocking-static-methods-in-java-system-classes/

Чтобы имитировать метод экземпляра, вы можете просто переопределить его в подклассе. Вы не можете сделать это со статическими методами, потому что нет «статического полиморфизма».

Powermock может это сделать, потому что работает с байт-кодом, в то время как другие популярные фреймворки полагаются на полиморфизм и создают подклассы с помощью CGLIB.

Из ссылки: «В основном все стандартные фиктивные фреймворки используют CGLib для создания фиктивного объекта, что означает, что они основаны на иерархической модели (CGLib создает подкласс класса для тестирования во время выполнения, который является фактическим фиктивным объектом) вместо модели делегирования, которую PowerMock использует посредством манипулирования байт-кодом путем делегирования MockGateway».

person Konrad Garus    schedule 23.03.2011