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)).
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 }
单元测试中的可变参数
无法直接在单元测试中传递可变参数。这是因为 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
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!