ホームページ >バックエンド開発 >Golang >クエリ パラメーターを使用して、Gin ハンドラー関数を効果的に単体テストする方法

クエリ パラメーターを使用して、Gin ハンドラー関数を効果的に単体テストする方法

DDD
DDDオリジナル
2024-12-22 01:50:24265ブラウズ

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

クエリ パラメーターを使用した Jin ハンドラー関数のテスト

エラー分析

クエリ パラメーター、無効なメモリ アドレス、または nil をバインドする Jin ハンドラー関数の単体テスト時不適切に初期化された 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。