簡體   English   中英

使用Web請求為函數編寫單元測試

[英]Writing a unit test for a function with a web request

這是一個我想編寫單元測試的函數:

public object RequestAndSerializeJSON(string url, Type type) {
    var request = (HttpWebRequest)WebRequest.Create(url);
    request.Accept = "application/json";

    var response = request.GetResponse();
    using (var responseStream = response.GetResponseStream())
    {
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(type);
        return serializer.ReadObject(responseStream);
    }
}

我對測試這個的第一個想法是將路徑傳遞給包含測試數據的文件,但是我不能這樣做,因為我將它轉換為HttpWebRequest並且它會引發文件路徑錯誤,因為它為文件路徑創建FileWebRequest

有什么好辦法呢? 我正在使用Visual Studio測試工具進行測試。

你這里有問題。 如您所見,您的代碼執行兩項操作。 它獲取請求然后創建一個對象。

如果你想對它進行單元測試,我建議拆分功能(這是一件好事,無論如何)

(經驗法則:如果函數的名稱很長,使用'和'字或描述多個東西,那么你應該重構它。我們想要小方法,責任小,所以我們可以替換它們或擴展它們或做與他們在未來更容易的事情)。

就像是..

public WebRequest GetRequest(string url);
public object DeSerializeJSON(WebRequest request, Type type);

可能有用。

現在,您可以在測試方法中注入模擬請求並相應地測試功能。

您需要抽象掉WebRequest對象,以便可以用模擬對象替換它。

我完全贊同麥卡布拉爾和約翰桑德斯。 幾年前,我在HttpWebRequest等上寫了一些抽象 ,以便對依賴於這些類的代碼進行模擬。

暫無
暫無

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

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