2011-03-23 101 views
8

由於我做了一些研究,我已經發現,PowerMock能夠嘲笑靜態Java方法。嘲諷靜態方法

有人能解釋(技術上)什麼是PowerMock比JUnit和其他以致不能或不會做的有什麼不同?另外,爲什麼靜態方法試圖模擬時會引起問題?

感謝

回答

12

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

爲了嘲笑實例方法,你可以簡單地覆蓋它的子類。你不能用靜態方法來做,因爲沒有「靜態多態性」。

Powermock能做到這一點,因爲它與字節碼的工作,而其他流行的框架依靠多態性與創建CGLIB子類。

來自鏈接:「基本上所有標準的模擬框架都使用CGLib創建一個模擬對象,這意味着它們基於分層模型(CGLib創建了一個類的子類,以在運行時測試這是實際的模擬對象),而不是PowerMock通過委託給MockGateway進行字節碼操作的代理模型。「