2015-11-12 199 views
0

我正在使用JUnit4Mockito進行單元測試。

這裏是這樣的情況:
我有一個需要測試的函數,而在這個函數中它包含一個網絡請求,現在我想模擬網絡請求結果。
單元測試模擬網絡請求

void func(String param1, String param2){ 
    //there would be some validations for the params 
    //... 

    //then network request, here I want to mock the result 
    String result = NetUtils.reqNetwork(param1, param2); 

    //work with the result 
    //... 
} 

這可能嗎?或者,也許我的測試方法是種不合理的。

+1

NetUtils .reqNetwork看起來像一個靜態方法。你不能用Mockito模擬一個靜態方法。你必須在它上面使用PowerMock。 – kswaughs

+0

@kswaughs感謝您的回覆,但有些博客指出PowerMock會更改字節碼以使其工作模擬靜態函數,那麼它是否安全? – xuanzhui

+0

使用PowerMock是安全的。當你運行你的junit時,它將啓動它自己的JVM,並且這些被模擬的對象只被加載到這個JVM中。所以,不需要擔心這一點。 – kswaughs

回答

0

只有Mockito,沒有辦法模擬出靜態方法調用。我通常的策略是讓這些靜態類可實例化,或者創建可實例化的包裝類。然後你可以像往常一樣嘲笑這些包裝。

另一種選擇是使用PowerMock,這是建立在中的Mockito頂部,但提供的能力,以模擬出這些靜態方法調用,用其他的東西像超構造,最終類主機一起等