Maison > Article > développement back-end > Les paramètres variadiques de Golang peuvent-ils être utilisés dans les tests unitaires ?
Les paramètres variadiques du langage Go permettent aux fonctions de recevoir un nombre variable de paramètres, en utilisant la syntaxe .... Cependant, les tests unitaires ne peuvent pas transmettre directement les paramètres variadiques. Vous pouvez utiliser la réflexion pour créer une fonction d'assistance de test et appeler la fonction de manière dynamique à l'aide de la méthode reflex.ValueOf(sumNumbers).CallSlice(reflect.ValueOf(tt.args)).
Paramètres variadiques en langage Go
Les paramètres variadiques permettent à une fonction de recevoir un nombre variable de paramètres. Dans Go, les arguments variadiques utilisent la syntaxe ...
. ...
语法。
实战
以下代码演示了可变参数的使用:
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
à l'aide de la méthode CallSlice
, en passant un [ ] int
slice comme argument. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!