2016-07-26 204 views
3

我有一個類,像這樣:如何「攔截」測試方法調用?

class A { 

    public static void makeCall() { 
     URL url = "www.google.com"; 
     InputStream result = url.openStream(); 
     //Do more stuff 
    } 
} 

我想寫一個單元測試它。我想要發生的事情是「攔截」openStream()的呼叫,這樣我就可以運行靜態方法makeCall(),並返回某種硬編碼的JSON,而不是實際進行呼叫。我一直無法弄清楚如何嘲笑它,或者甚至有可能。

我尋找相同的行爲角的$httpBackend,任何意見或建議?

+1

您應該從您實際嘗試測試的邏輯(認爲依賴注入)中分離出HTTP代碼。 – SLaks

+1

所以你想單獨調用'makeHTTPCall(URL url)',然後只是模擬該方法返回JSON?這肯定能起作用 –

+0

如果你確實必須嘲笑它​​,那麼使用JMockit模擬庫(聲明'@Mocked URL url'模擬字段然後在'openStream()'中記錄期望的期望)是微不足道的。 –

回答

3

您不應該需要模擬方法成員變量。爲了更好的設計,使url成爲方法中的一個參數。

public static void makeCall(URL url){ 

然後在你的測試通過模擬。

這也允許更多的靈活性和未來可能的代碼重用。

+0

這就是我最終做的。讓它輕鬆可嘲弄,設計感覺更好。 –