單元測試中模擬 HttpClient
單元測試中,模擬外部相依性以隔離目標程式碼的行為是很常見的做法。模擬 HttpClient 允許測試依賴 HTTP 請求的程式碼,而無需進行實際的網路呼叫。
考慮以下場景:
<code class="language-csharp">public interface IHttpHandler { HttpClient Client { get; } } public class HttpHandler : IHttpHandler { public HttpClient Client => new HttpClient(); } public class Connection { private readonly IHttpHandler _httpClient; public Connection(IHttpHandler httpClient) { _httpClient = httpClient; } public void DoSomething() { /* 使用 _httpClient.Client 进行 HTTP 调用 */ } }</code>
在單元測試專案中,您可能想要模擬 HttpClient 以避免進行網路調用,並專注於測試 Connection 類別的邏輯。
<code class="language-csharp">private IHttpHandler _httpClient; [TestMethod] public void TestMockConnection() { //此处需要创建 HttpClient 的模拟实例,而不是真实的实例 var connection = new Connection(_httpClient); connection.DoSomething(); }</code>
為此,您可以使用依賴注入來注入模擬 HttpClient。 HttpClient 的可擴充性在於傳遞給建構函式的 HttpMessageHandler。您可以在單元測試中建立模擬 HttpMessageHandler 並將其傳遞給 HttpClient 建構函式。
<code class="language-csharp">[TestMethod] public void TestMockConnection() { var mockHttp = new MockHttpMessageHandler(); // 创建一个模拟 HttpMessageHandler var httpClient = new HttpClient(mockHttp); // 将模拟 HttpMessageHandler 传递给 HttpClient 构造函数 var connection = new Connection(new HttpHandler { Client = httpClient }); // 将模拟 HttpClient 注入 Connection 类 connection.DoSomething(); // 通过对模拟 HttpMessageHandler 设置期望来验证是否进行了预期的 HTTP 请求。 }</code>
透過使用依賴注入和模擬 HttpMessageHandler,您可以有效地隔離被測程式碼並驗證其行為,而無需進行實際的網路呼叫。
以上是如何模擬 HttpClient 進行有效的單元測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!