>백엔드 개발 >C++ >단위 테스트에서 HttpClient를 효과적으로 모의하려면 어떻게 해야 합니까?

단위 테스트에서 HttpClient를 효과적으로 모의하려면 어떻게 해야 합니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-13 14:03:43576검색

How Can I Effectively Mock HttpClient in Unit Tests?

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

배경

단위 테스트에서는 실제 호출을 피하기 위해 외부 종속성을 모의하는 것이 바람직한 경우가 많습니다. 이는 HttpClient와 같은 HTTP 클라이언트와 상호 작용하는 코드를 테스트하는 데 특히 중요합니다.

질문

다음 코드 구조를 고려하세요.

<code>public interface IHttpHandler
{
    HttpClient Client { get; }
}

public class HttpHandler : IHttpHandler
{
    public HttpClient Client
    {
        get { return new HttpClient(); }
    }
}</code>

이 경우 HttpHandler 클래스는 내부 HttpClient 인스턴스에 의존합니다. IHttpHandler에 의존하는 연결에 대한 모의 테스트를 만들려면 HttpClient 종속성을 모의해야 합니다.

해결책: HttpMessageHandler 사용

HttpClient의 확장성은 HttpMessageHandler 인스턴스 삽입을 허용합니다. 모의 HttpMessageHandler를 생성함으로써 우리는 HttpClient 종속성의 동작을 효과적으로 제어할 수 있습니다.

Moq 사용방법

Moq는 HttpClient 모의를 지원하는 인기 있는 모의 프레임워크입니다. Moq를 사용하여 시뮬레이션하는 방법은 다음과 같습니다.

  1. 모의 HttpMessageHandler를 초기화합니다.
  2. When() 메서드를 사용하여 HTTP 요청에 대한 예상 응답을 설정합니다.
  3. 모의 IHttpHandler를 만들고 모의 HttpMessageHandler를 삽입합니다.
  4. Connection 클래스에 모의 IHttpHandler를 삽입합니다.

대안: MockHttp

더 깔끔한 접근 방식을 선호한다면 MockHttp라는 라이브러리를 사용하여 HttpClient 모의 작업을 단순화할 수 있습니다.

  1. RichardSzalay.MockHttp NuGet 패키지를 설치합니다.
  2. MockHttpMessageHandler 인스턴스를 생성합니다.
  3. 응답 동작을 지정하려면 When() 메서드를 사용하세요.
  4. MockHttpMessageHandler를 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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