首頁 >後端開發 >Golang >golang可變參數是否可以用於單元測試?

golang可變參數是否可以用於單元測試?

PHPz
PHPz原創
2024-04-29 18:09:02543瀏覽

Go 語言中的可變參數允許函數接收數量不定的參數,使用 ... 語法。然而,單元測試無法直接傳遞可變參數。可以使用反射建立測試助手函數,使用 reflect.ValueOf(sumNumbers).CallSlice(reflect.ValueOf(tt.args)) 方法動態呼叫函數。

golang可變參數是否可以用於單元測試?

Go 語言中的可變參數

#可變參數允許一個函數接收數量不定的參數。在 Go 中,可變參數使用 ... 語法。

實戰

以下程式碼示範了可變參數的使用:

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
}

#單元測試中的可變參數

無法直接在單元測試中傳遞可變參數。這是因為 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)
            }
        })
    }
}

這個輔助函數使用CallSlice 方法動態地呼叫sumNumbers 函數,並傳遞一個 []int 切片作為參數。

以上是golang可變參數是否可以用於單元測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn