單元測試中模擬 HttpClient
背景
在單元測試中,模擬外部依賴項以避免實際呼叫通常是可取的。這對於測試與 HTTP 用戶端(如 HttpClient)互動的程式碼尤其重要。
問題
考慮以下程式碼結構:
<code>public interface IHttpHandler { HttpClient Client { get; } } public class HttpHandler : IHttpHandler { public HttpClient Client { get { return new HttpClient(); } } }</code>
在這種情況下,HttpHandler 類別依賴內部 HttpClient 實例。若要為依賴 IHttpHandler 的 Connection 建立模擬測試,需要模擬 HttpClient 相依性。
解:使用 HttpMessageHandler
HttpClient 的可擴充性允許注入 HttpMessageHandler 實例。透過建立模擬 HttpMessageHandler,我們可以有效地控制 HttpClient 依賴項的行為。
使用 Moq 的方法
Moq 是一個流行的模擬框架,支援模擬 HttpClient。以下是使用 Moq 模擬的方法:
替代方法:MockHttp
如果您喜歡更簡潔的方法,則可以使用名為 MockHttp 的函式庫來簡化 HttpClient 模擬:
使用 MockHttp 的程式碼範例
<code>var mockHttp = new MockHttpMessageHandler(); mockHttp.When("http://localhost/api/user/*") .Respond("application/json", "{'name' : 'Test McGee'}"); var client = new HttpClient(mockHttp); var response = await client.GetAsync("http://localhost/api/user/1234"); var json = await response.Content.ReadAsStringAsync(); Console.Write(json); // {'name' : 'Test McGee'}</code>
透過使用 HttpMessageHandler 模擬,您可以有效地隔離單元測試中 HttpClient 依賴項的行為,確保您的測試獨立於外部因素運行。
以上是如何在單元測試中有效模擬 HttpClient?的詳細內容。更多資訊請關注PHP中文網其他相關文章!