ホームページ > バックエンド開発 > Golang > モックを使用してジン ハンドラー関数を効果的に単体テストするにはどうすればよいですか?

モックを使用してジン ハンドラー関数を効果的に単体テストするにはどうすればよいですか?

DDD
リリース: 2024-12-17 20:31:12
オリジナル
808 人が閲覧しました

How to Effectively Unit Test Gin Handler Functions with Mocks?

Gin ハンドラー関数の単体テストのモック

c.BindQuery 機能のテスト

Gin の HTTP リクエストに関連する操作をテストするには、*http を初期化します。 .リクエストして、Gin コンテキストに設定します。特に c.BindQuery をテストするには、リクエストの URL と URL.RawQuery を初期化します。

import (
    "net/http/httptest"

    "github.com/gin-gonic/gin"
)

func mockGin() (*gin.Context, *httptest.ResponseRecorder) {
    w := httptest.NewRecorder()
    c, _ := gin.CreateTestContext(w)

    // Test request
    req := &http.Request{
        URL: &url.URL{},
        Header: make(http.Header),
    }

    // Test query
    testQuery := weldprogs.QueryParam{/* init fields */}

    q := req.URL.Query()
    for _, s := range testQuery.Basematgroup_id {
        q.Add("basematgroup_id", s)
    }

    // Set URL.RawQuery
    req.URL.RawQuery = q.Encode()

    // Set request to Gin context
    c.Request = req

    return c, w
}
ログイン後にコピー

JSON バインディングのモック

JSON バインディングのモックに関するガイダンスについては、このリソースを参照してください。

テストサービス

次のようなサービスservices.WeldprogService.GetmaterialByFilter(&queryParam) はそのままではテストできません。テスト可能にするには:

  • それらをインターフェースに変換します。
  • それらを依存関係としてハンドラーに挿入します。
  • Gin コンテキスト値として設定します。

インターフェイスとコンテキストの値アプローチ:

type services interface {
    GetMaterialByFilter(*weldprogs.QueryParam) (*weldprogs.MaterialByFilter, error)
}

func mockWeldprogService(service services) {
    return func(c *gin.Context) {
        c.Set("svc_context_key", service)
    }
}

func TestGetMaterialByFilter(t *testing.T) {
    w := httptest.NewRecorder()
    c, _ := gin.CreateTestContext(w)

    c.Use(mockWeldprogService(&mockSvc{}))

    GetMaterialByFilter(c)

    // ...
}
ログイン後にコピー

以上がモックを使用してジン ハンドラー関数を効果的に単体テストするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート