對綁定查詢參數的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實作服務介面。
以上是如何使用查詢參數有效地對 Gin 處理程序函數進行單元測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!