Rumah > pembangunan bahagian belakang > Golang > Bolehkah parameter variadik golang digunakan dalam ujian unit?

Bolehkah parameter variadik golang digunakan dalam ujian unit?

PHPz
Lepaskan: 2024-04-29 18:09:02
asal
541 orang telah melayarinya

Parameter variadik dalam bahasa Go membolehkan fungsi menerima bilangan parameter yang berubah-ubah, menggunakan ... sintaks. Walau bagaimanapun, ujian unit tidak boleh melepasi parameter variadic secara langsung. Anda boleh menggunakan refleksi untuk mencipta fungsi pembantu ujian dan memanggil fungsi secara dinamik menggunakan kaedah reflect.ValueOf(sumNumbers).CallSlice(reflect.ValueOf(tt.args)).

Bolehkah parameter variadik golang digunakan dalam ujian unit?

Parameter variadik dalam bahasa Go

Parameter variadik membenarkan fungsi menerima bilangan parameter yang berubah-ubah. Dalam Go, argumen variadic menggunakan sintaks .... ... 语法。

实战

以下代码演示了可变参数的使用:

func sumNumbers(args ...int) int {
    sum := 0
    for _, v := range args {
        sum += v
    }
    return sum
}

func main() {
    // 传递一个参数
    result := sumNumbers(10)
    fmt.Println(result) // 输出:10

    // 传递多个参数
    result = sumNumbers(10, 20, 30)
    fmt.Println(result) // 输出:60
}
Salin selepas log masuk

单元测试中的可变参数

无法直接在单元测试中传递可变参数。这是因为 Go 语言的测试框架不支持它们。

但是,我们可以使用反射来动态地调用具有可变参数的函数。以下代码演示了如何为此创建一个测试助手函数:

func TestSumNumbers(t *testing.T) {
    tests := []struct {
        args []int
        want int
    }{
        {[]int{10}, 10},
        {[]int{10, 20}, 30},
    }

    for _, tt := range tests {
        t.Run(fmt.Sprintf("%v", tt.args), func(t *testing.T) {
            got := reflect.ValueOf(sumNumbers).CallSlice(reflect.ValueOf(tt.args))
            if got.Int() != tt.want {
                t.Errorf("sumNumbers(%v) = %v, want %v", tt.args, got.Int(), tt.want)
            }
        })
    }
}
Salin selepas log masuk

这个辅助函数使用 CallSlice 方法动态地调用 sumNumbers 函数,并传递一个 []int

🎜Praktikal🎜🎜🎜Kod berikut menunjukkan penggunaan parameter berubah: 🎜rrreee🎜🎜Parameter pembolehubah dalam ujian unit🎜🎜🎜Parameter pembolehubah tidak boleh dilalui terus dalam ujian unit. Ini kerana rangka kerja ujian bahasa Go tidak menyokongnya. 🎜🎜Walau bagaimanapun, kita boleh menggunakan pantulan untuk memanggil fungsi secara dinamik dengan parameter berubah-ubah. Kod berikut menunjukkan cara mencipta fungsi pembantu ujian untuk ini: 🎜rrreee🎜Fungsi pembantu ini secara dinamik memanggil fungsi sumNumbers menggunakan kaedah CallSlice, menghantar [ ] int slice sebagai parameter. 🎜

Atas ialah kandungan terperinci Bolehkah parameter variadik golang digunakan dalam ujian unit?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan