[英]Unit testing a REST client
我對單元測試相當新,但我正在嘗試將其合並到我編寫的任何新代碼(包括錯誤修復)的開發過程中。
我正在使用REST客戶端與Highrise(37Signals)進行通信。 如何在不依賴外部依賴的情況下對此進行單元測試? (REST服務)。
例如,我將有一個名為GetPeople()
的方法
我想要進行單元測試的事情......
我該怎么做才能測試該服務的功能是否相同。 IE用戶還有名字嗎? 我可以對此進行單元測試,還是更多的集成測試?
對於那些試圖測試實際的HttpWebRequest和HttpWebResponse而不是模擬的人。 我在這里提到了一種方法: http : //nripendra-newa.blogspot.com/2012/10/testing-rest-clients.html 。 我稱之為集成測試,而不是單元測試。 請參閱此處查看實際實施: https : //github.com/nripendra/Resty.Net/blob/master/tests/Resty.Net.Tests/RestRequestTest.cs
該方法:
我假設您的代碼現在直接使用HttpWebRequest
和HttpWebResponse
。 如果是這種情況,用IRequest
替換所有出現的HttpWebRequest
和用IResponse
替換HttpWebResponse
。 定義了這兩個接口並公開了您需要的屬性和方法,如下所示:
public interface IRequest
{
IResponse GetResponse(string url);
IResponse GetResponse(string url, object data);
}
public interface IResponse
{
Stream GetStream();
}
然后它只是兩次實現這些接口; 一次用於真正的應用程序(使用HttpWebRequest
和HttpWebResponse
來執行HTTP操作)和一次用於測試(不使用HTTP,而是可能寫入控制台,日志或類似的東西)。
然后,在實例化您的客戶端時,只需注入您想要的IRequest
實現:
var realClient = new Client(new MyHttpRequest());
var testClient = new Client(new MyTestRequest());
對與外部REST API交互的單元測試代碼來說,這是一個非常常見的要求。 模擬API服務器實際上通常很煩人,因為大多數Web框架需要大量配置才能開始模擬端點。 例如NancyFX和Asp.net。
除此之外,斷言發送到服務器的數據可能非常困難 - 這實際上意味着您只能檢查響應是否正確處理。
即使在真實端點上進行集成測試,也無法測試當您使用的API發生故障時會發生什么情況,或者輸出異常狀態代碼,因為您無法控制端點。
經過很長一段時間試圖找到這個問題的解決方案后,我決定使用基於內置HttpListener類的真實Web服務器編寫一個用於模擬API端點的庫。
https://github.com/paulmorrishill/FluentSimulator
該庫支持模擬端點,標頭,響應,響應緩慢,響應失敗。 HTTP端點上可能發生的每種類型的事件。
它還允許聲明發送到服務器的數據完全符合您的預期。
這是使用模擬對象的教科書示例。 所以你要做的就是實現一個模擬你期望的行為的假服務器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.