我有一個遺留類,我添加了一些方法,需要創建一些只測試這4種方法的JUnit測試。所測試的類具有初始化字符串的 1 參數構造函數。但是,在構造函數中調用一個私有方法,該方法使用屬性文件初始化多個私有類和一個數據源。我要測試的方法不使用這些類中的任何一個。我是編寫JUnit測試的新手,不知道如何模擬這個私有方法,或者是否可能。正在測試的類的構造函數是這樣的:public ClassUnderTest(String wlUrl) throws Exception {try { this.url = wlUrl; initialize();} catch (Exception ex) { throw ex;}} initialize() 方法是私有的,它實例化了幾個我在要測試的方法中不使用的私有類。private void initialize() throws Exception { try { PropertyManager.getInstance(); logAdapter = LogAdapter.getInstance(PropertyManager.getProperty("LOG_CONFIG_FILE")); log20 = new ServerLogging20(); ds = (javax.sql.DataSource) ctx.lookup(PropertyManager.getProperty("DATASOURCE")); setInitialContext(url); } catch (Exception e) { log.error("ERROR instantiating PropertyManager & LogAdapter - " + e.getMessage()); throw e; }}有沒有辦法模擬這個私有方法來測試我寫的方法?
1 回答

慕神8447489
TA貢獻1780條經驗 獲得超1個贊
Mockito不支持模擬私有方法。
以下是Mockito的常見問題解答摘錄:
為什么Mockito不嘲笑私有方法?
首先,我們并不教條地嘲笑私人方法。我們只是不關心私有方法,因為從測試的角度來看,私有方法并不存在。以下是Mockito不嘲笑私有方法的幾個原因:
它需要對永遠不會防彈的類加載器進行黑客攻擊,并且它會更改API(您必須使用自定義測試運行程序,注釋類等)。
它很容易解決 - 只需將方法的可見性從私有更改為受包保護(或受保護)即可。
它需要團隊花時間實施和維護它。鑒于第(2)點以及它已經在不同工具(powermock)中實現的事實,這是沒有意義的。
最后。。。嘲笑私有方法暗示了面向對象的理解存在問題。在OO中,您希望對象(或角色)進行協作,而不是方法。忘掉 pascal 和程序代碼吧。在物體中思考。
如果你真的想嘲笑私有方法,看看PowerMock。
添加回答
舉報
0/150
提交
取消