ホームページ  >  記事  >  バックエンド開発  >  golang の可変引数パラメーターは単体テストで使用できますか?

golang の可変引数パラメーターは単体テストで使用できますか?

PHPz
PHPzオリジナル
2024-04-29 18:09:02494ブラウズ

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。