簡體   English   中英

如何使用Powermock easyMock測試靜態void函數?

[英]How to test static void functions using Powermock easyMock?

我有一個返回void的靜態函數。

此函數執行一些操作並在內部填充地圖。

像這樣

public static void doSomething(arg1,arg2,arg3) {
    //Do some processing with the input parameters

    if(arg1 satisfies given condition) {
        //Create object
        Conn conn = new Conn()

        Map<String, List<String>> map = new Map();

        //Populate the map with the processed value

        conn.setAttributes(map);
    }
}

現在,我要測試是否滿足條件,即是否用期望值填充“ conn”對象中的“ map”? 需要幫助。

這里的問題是隱藏的依賴關系 ,即Conn對象的實例化。

根據經驗, 業務代碼不應該負責獲取必須與之通信的依賴關系。

您有兩種解決方案:

  1. 屈服於 不良的設計,並使用 Powermock 注入Conn模擬。

  2. 改進您的設計並使用依賴項注入/控制反轉

    這是可以做到通過簡單地取代的內實例化Conn與類型的附加參數對象Conn

    但更好的方法是將您的static方法轉換為常規的非靜態成員方法,並將Conn的實例作為構造函數參數傳遞給private final成員變量。

    鑒於Conn類不是final您可以使用常規的模擬frmeworks創建Conn模擬並在您的UnitTests中使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM