2011-10-01 50 views
3

我知道我們可以用PowerMock來嘲弄使用核心Java庫的靜態方法嗎?Jmockit.Want理解它是如何在內部完成的?我們在測試用例本身中定義了模擬類(儘管在每個框架中都有不同的方法來創建模擬類,例如在Jmockit中使用期望語法),但這些框架必須定義自定義類加載器,通過它們必須在測試用例本身內部尋找這個類的定義。 它是一個猜測。不確定它是否正確?但即使我是正確的,類加載器hirerchy的優先是boootstraploader然後applicationclassloader比customerclassloader。 那麼它如何從customerclassloader而不是applicationclassloader中選擇?靜態方法如何在JMockit,PowerMocks等任何Mocking Framework中被模擬?

回答

5

JMockit和其他較新的框架基於Java 1.5 Instrumentation框架。這使您可以重新定義私有,靜態和最終方法。即使沒有參數構造函數也可以重新定義。

這些框架使用Java代理,它是一個可插入的庫,運行嵌入在JVM中,攔截類加載過程並可幫助檢測類的字節碼。

您可以查看深度的Java儀器和http://jmockit.googlecode.com/svn/trunk/www/about.html

相關問題