>백엔드 개발 >C++ >효과적인 단위 테스트를 위해 HttpClient를 모의하는 방법은 무엇입니까?

효과적인 단위 테스트를 위해 HttpClient를 모의하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-13 13:46:43369검색

How to Mock HttpClient for Effective Unit Testing?

단위 테스트에서 모의 ​​HttpClient

단위 테스트에서는 대상 코드의 동작을 격리하기 위해 외부 종속성을 모의하는 것이 일반적입니다. Mock 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를 모의할 수 있습니다.

<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.