> 백엔드 개발 > Golang > 쿼리 매개변수를 사용하여 진 처리기 기능을 효과적으로 단위 테스트하는 방법은 무엇입니까?

쿼리 매개변수를 사용하여 진 처리기 기능을 효과적으로 단위 테스트하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-12-22 01:50:24
원래의
214명이 탐색했습니다.

How to Effectively Unit Test Gin Handler Functions with Query Parameters?

쿼리 매개변수를 사용하여 Gin 핸들러 함수 테스트

오류 분석

쿼리 매개변수를 바인딩하는 Gin 핸들러 함수를 단위 테스트할 때 잘못된 메모리 주소 또는 nil 부적절하게 초기화된 HTTP 요청으로 인해 포인터 역참조 오류가 발생합니다.

해결책: 요청 모의 및 바인딩

c.BindQuery()를 사용하여 쿼리 매개변수 바인딩을 모의하려면 적절한 URL과 URL.RawQuery를 사용하여 HTTP 요청을 초기화하세요. 다음 도우미 기능을 사용하세요.

func mockGin() (*gin.Context, *httptest.ResponseRecorder) {
    req := &http.Request{
        URL:    &url.URL{},
        Header: make(http.Header),
    }

    q := req.URL.Query()
    // Add query parameters to the request
    // ...

    req.URL.RawQuery = q.Encode()

    c, _ := gin.CreateTestContext(httptest.NewRecorder())
    c.Request = req

    return c, httptest.NewRecorder()
}
로그인 후 복사

서비스 호출 테스트

서비스 호출을 테스트하려면 서비스를 인터페이스로 만들고 핸들러에 삽입하세요. 서비스를 Gin 컨텍스트 값으로 설정하여 단위 테스트에서 이를 모의할 수 있습니다. 예:

func GetMaterialByFilter(c *gin.Context) {
    weldprogService := mustGetService(c)
    // ... Call the service method ...
}

func mustGetService(c *gin.Context) services.WeldprogService {
    svc, exists := c.Get("svc_context_key")
    if !exists {
        panic("service was not set")
    }
    return svc.(services.WeldprogService)
}
로그인 후 복사

단위 테스트에서 모의 ​​서비스를 컨텍스트에 설정합니다.

c.Set("svc_context_key", &mockSvc{})
로그인 후 복사

여기서 mockSvc는 서비스 인터페이스를 구현합니다.

위 내용은 쿼리 매개변수를 사용하여 진 처리기 기능을 효과적으로 단위 테스트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿