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 中国語 Web サイトの他の関連記事を参照してください。