我想知道是否有可能與PowerMock
或任何其他庫嘲笑類庫中的靜態調用。該第三方庫中的類調用rt.jar中的某個類,並且我想返回一個返回Type
的自定義實現。我試圖在測試代碼之外做到這一點。如何嘲笑從第三方庫的類靜態調用
否則,我不得不從該庫擴展幾個類並替換一些實現。有人做過這樣的事嗎?
我想知道是否有可能與PowerMock
或任何其他庫嘲笑類庫中的靜態調用。該第三方庫中的類調用rt.jar中的某個類,並且我想返回一個返回Type
的自定義實現。我試圖在測試代碼之外做到這一點。如何嘲笑從第三方庫的類靜態調用
否則,我不得不從該庫擴展幾個類並替換一些實現。有人做過這樣的事嗎?
是的,這是可能的,例如,如果只想模擬一種方法,則使用PowerMock.mockStatic()
或PowerMock.mockStaticPartial()
。
在PowerMock的主頁上有一個相當不錯的教程。我發貼an example on SO。
[編輯]如果你想在生產代碼中做這樣的魔術,但是,我會建議不要使用測試框架。也許Groovy可以幫助你 - 在運行時,Groovy可以操作類(甚至是JDK類),而且它(我認爲)是JVM頂層的一個更薄的層。
一般來說,做這樣的鐵桿存根(這不是嘲笑你所描述的)是一個非常糟糕的主意。我會在這個庫上建立一個小抽象,以便你可以完全控制你想要返回的東西。在測試之外使用PowerMock的一些功能是可能的,但這不是小菜一碟。這裏你有粗略的描述,可以幫助,如果你真的想要:https://groups.google.com/d/msg/powermock/SMDMe-y6fLg/1HF0TsGOqTIJ
無論如何,我不會建議這樣做。
難道沒有辦法從您的第三方庫'設置'所需的返回值嗎?這將避免嘲笑,所以我猜你先檢查了。 – vikingsteve 2013-03-11 09:18:01