Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Amalan terbaik untuk ujian fungsi Golang

Amalan terbaik untuk ujian fungsi Golang

WBOY
WBOYasal
2024-04-13 08:12:02824semak imbas

Amalan terbaik untuk ujian fungsi Go: kes ujian yang jelas. Gunakan ujian dipacu jadual. Meliputi syarat sempadan. Kebergantungan olok-olok. Gunakan subtest. Ukur liputan ujian.

Golang 函数测试的最佳实践

Amalan Terbaik untuk Pengujian Fungsi dalam Go

Pengujian fungsi dalam Go adalah penting untuk memastikan kebolehpercayaan kod. Berikut ialah beberapa amalan terbaik untuk membantu anda menulis ujian fungsi yang berkuasa:

1. Tentukan dengan jelas kes ujian:
Untuk setiap fungsi, tentukan dengan jelas tingkah laku yang akan diuji dan hasil yang dijangkakan. Ini akan membantu anda menumpukan pada ujian menulis yang memenuhi tujuan ujian khusus anda.

2. Gunakan ujian dipacu jadual:
Ujian dipacu jadual membolehkan anda membuat berbilang panggilan ke fungsi menggunakan set nilai input. Ini membantu mengurangkan kod pendua dan meningkatkan kebolehbacaan.

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. Syarat sempadan tutup:
Selain menguji keadaan biasa, uji juga syarat sempadan input. Ini membantu mendedahkan masalah yang berpotensi dalam kes tepi.

4. Kebergantungan olok-olok:
Jika sesuatu fungsi bergantung pada kebergantungan luar, gunakan teknik mengejek untuk mengasingkan kebergantungan ini. Ini memastikan bahawa kami menguji fungsi itu sendiri dan bukan kebergantungannya.

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. Gunakan subujian:
Ujian fungsi besar boleh dipecahkan kepada subujian yang lebih kecil. Ini membantu mengatur kod anda dan meningkatkan kebolehbacaan.

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. Ukur liputan ujian:
Gunakan alat liputan untuk mengukur sejauh mana ujian meliputi kod anda. Ini membantu mengenal pasti laluan kod yang belum diuji dan meningkatkan liputan ujian.

Dengan mengikuti amalan terbaik ini, anda boleh menulis ujian yang lebih cekap dan boleh dipercayai untuk fungsi Go anda.

Atas ialah kandungan terperinci Amalan terbaik untuk ujian fungsi Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn