고급 테스트를 위한 HTTP 클라이언트 조롱
강력하고 안정적인 소프트웨어 테스트를 추구하는 데 있어서 HTTP 클라이언트를 조롱하는 것은 초석입니다. 그러나 사용자 정의 인터페이스로 이를 달성하는 것은 어려울 수 있습니다.
기본 인증을 사용하여 HTTP GET 요청과 함께 HttpClient 인터페이스를 사용하는 다음 시나리오를 고려하십시오.
func GetOverview(client HttpClient, overview *Overview) (*Overview, error) { request, err := http.NewRequest("GET", fmt.Sprintf("%s:%s/api/overview", overview.Config.Url, overview.Config.Port), nil) if (err != nil) { log.Println(err) } request.SetBasicAuth(overview.Config.User, overview.Config.Password) resp, err := client.Do(request) if (err != nil) { return nil, err } if resp.StatusCode != 200 { return nil, fmt.Errorf("Bad StatusCode: %v", resp.StatusCode) } return overview, nil }
HTTP를 모의하고 시뮬레이션하려면 대답을 듣다 보면 딜레마에 빠지게 됩니다. gock과 같은 기존 모의 라이브러리는 GET 또는 POST와 같은 특정 HTTP 메서드에 대한 모의만 지원합니다.
Custom Mock Approach
이 HttpClient를 모의하는 핵심은 구현하는 것입니다. 사용자 정의 Mock 구조체와의 인터페이스입니다. 예를 들어, 일치하는 Do 메소드를 사용하여 ClientMock 구조체를 정의할 수 있습니다:
type ClientMock struct { } func (c *ClientMock) Do(req *http.Request) (*http.Response, error) { // Simulate HTTP response with custom logic return &http.Response{}, nil }
Mock 통합
이 Mock 구조체를 제자리에 삽입할 수 있습니다. GetOverview 함수에 들어갑니다. 예는 다음과 같습니다.
mock := ClientMock{} overview, err := GetOverview(&mock, &overview)
ClientMock을 사용하면 시뮬레이션된 HTTP 응답을 제어할 수 있어 외부 HTTP 서버나 서비스에 의존하지 않고도 포괄적인 단위 테스트가 가능합니다.
위 내용은 고급 Go 테스트를 위해 HTTP 클라이언트를 효과적으로 모의하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!