ホームページ > バックエンド開発 > Golang > Golang 関数テストのベスト プラクティス

Golang 関数テストのベスト プラクティス

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2024-04-13 08:12:02
オリジナル
984 人が閲覧しました

Go 関数テストのベスト プラクティス: 明確に定義されたテスト ケース。テーブル駆動テストを使用します。境界条件をカバーします。依存関係を模擬します。サブテストを使用します。テストカバレッジを測定します。

Golang 函数测试的最佳实践

Go での関数テストのベスト プラクティス

Go での関数テストは、コードの信頼性を確保するために重要です。強力な関数テストを作成するのに役立つベスト プラクティスをいくつか紹介します:

1. 明確なテスト ケースを定義します:
関数ごとに、テスト対象の動作と期待される結果を明確に定義します。これは、特定のテスト目的を満たすテストの作成に集中するのに役立ちます。

2. テーブル駆動テストを使用する:
テーブル駆動テストを使用すると、一連の入力値を使用して関数を複数回呼び出すことができます。これにより、重複コードが減り、読みやすさが向上します。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

func TestSum(t *testing.T) {

    type testInput struct {

        a, b int

        want int

    }

 

    tests := []testInput{

        {1, 2, 3},

        {-5, 10, 5},

        {0, 0, 0},

    }

 

    for _, tt := range tests {

        got := Sum(tt.a, tt.b)

        if got != tt.want {

            t.Errorf("got: %d, want: %d", got, tt.want)

        }

    }

}

ログイン後にコピー

3. カバー境界条件:
通常の条件のテストに加えて、入力境界条件もテストする必要があります。これは、エッジケースにおける潜在的な問題を明らかにするのに役立ちます。

4. 依存関係のモック:
関数が外部の依存関係に依存している場合は、モッキング テクノロジを使用してこれらの依存関係を分離します。これにより、依存関係ではなく関数自体をテストしていることが保証されます。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

import (

    "testing"

 

    "github.com/golang/mock/gomock"

)

 

func TestGetUserData(t *testing.T) {

    ctrl := gomock.NewController(t)

    defer ctrl.Finish()

 

    mockUserDataRepository := mock_user_data_repository.NewMockUserDataRepository(ctrl)

    userDataService := NewUserDataService(mockUserDataRepository)

 

    userID := 10

    expectedData := user_data.UserData{Name: "John Doe"}

 

    mockUserDataRepository.EXPECT().Get(userID).Return(expectedData, nil)

 

    data, err := userDataService.GetUserData(userID)

    if err != nil {

        t.Errorf("unexpected error: %v", err)

    }

    if data != expectedData {

        t.Errorf("unexpected data: %v", data)

    }

}

ログイン後にコピー

5. サブテストを使用する:
大規模な関数テストは、より小さなサブテストに分割できます。これはコードを整理し、読みやすさを向上させるのに役立ちます。

1

2

3

4

5

6

7

8

9

func TestSort(t *testing.T) {

    t.Run("empty array", func(t *testing.T) {

        arr := []int{}

        arrayCopy := Sort(arr)

        if !reflect.DeepEqual(arr, arrayCopy) {

            t.Errorf("sorting empty array results in a new array")

        }

    })

}

ログイン後にコピー

6. テスト カバレッジの測定:
カバレッジ ツールを使用して、テストによるコードのカバレッジを測定します。これは、テストされていないコード パスを特定し、テスト カバレッジを向上させるのに役立ちます。

これらのベスト プラクティスに従うことで、Go 関数のより効率的で信頼性の高いテストを作成できます。

以上がGolang 関数テストのベスト プラクティスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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