Насмешливые статические методы - PullRequest
9 голосов
/ 23 марта 2011

Проведя некоторые исследования, я обнаружил, что PowerMock умеет имитировать статические методы Java.

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

спасибо

1 Ответ

13 голосов
/ 23 марта 2011

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

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

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

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

...