Go 関数テストのベスト プラクティス: 明確に定義されたテスト ケース。テーブル駆動テストを使用します。境界条件をカバーします。依存関係を模擬します。サブテストを使用します。テストカバレッジを測定します。
Go での関数テストのベスト プラクティス
Go での関数テストは、コードの信頼性を確保するために重要です。強力な関数テストを作成するのに役立つベスト プラクティスをいくつか紹介します:
1. 明確なテスト ケースを定義します:
関数ごとに、テスト対象の動作と期待される結果を明確に定義します。これは、特定のテスト目的を満たすテストの作成に集中するのに役立ちます。
2. テーブル駆動テストを使用する:
テーブル駆動テストを使用すると、一連の入力値を使用して関数を複数回呼び出すことができます。これにより、重複コードが減り、読みやすさが向上します。
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. 依存関係のモック:
関数が外部の依存関係に依存している場合は、モッキング テクノロジを使用してこれらの依存関係を分離します。これにより、依存関係ではなく関数自体をテストしていることが保証されます。
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. サブテストを使用する:
大規模な関数テストは、より小さなサブテストに分割できます。これはコードを整理し、読みやすさを向上させるのに役立ちます。
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 サイトの他の関連記事を参照してください。