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

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

DDD
DDD원래의
2024-12-22 01:50:24279검색

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

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