Go 語言中的可變參數允許函數接收數量不定的參數,使用 ... 語法。然而,單元測試無法直接傳遞可變參數。可以使用反射建立測試助手函數,使用 reflect.ValueOf(sumNumbers).CallSlice(reflect.ValueOf(tt.args)) 方法動態呼叫函數。
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中文網其他相關文章!