[英]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.