Heim >Backend-Entwicklung >Golang >Können variadische Golang-Parameter in Unit-Tests verwendet werden?

Können variadische Golang-Parameter in Unit-Tests verwendet werden?

PHPz
PHPzOriginal
2024-04-29 18:09:02570Durchsuche

Variadische Parameter in der Go-Sprache ermöglichen es Funktionen, eine variable Anzahl von Parametern unter Verwendung der ...-Syntax zu empfangen. Unit-Tests können variadische Parameter jedoch nicht direkt übergeben. Sie können Reflection verwenden, um eine Testhilfsfunktion zu erstellen und die Funktion dynamisch mithilfe der Methode „reflect.ValueOf(sumNumbers).CallSlice(reflect.ValueOf(tt.args))“ aufzurufen.

Können variadische Golang-Parameter in Unit-Tests verwendet werden?

Variadische Parameter in der Go-Sprache

Variadische Parameter ermöglichen einer Funktion den Empfang einer variablen Anzahl von Parametern. In Go verwenden variadische Argumente die Syntax .... ... 语法。

实战

以下代码演示了可变参数的使用:

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

🎜Praktisch🎜🎜🎜Der folgende Code demonstriert die Verwendung variabler Parameter: 🎜rrreee🎜🎜Variable Parameter in Unit-Tests🎜🎜🎜Variable Parameter können in Unit-Tests nicht direkt übergeben werden. Dies liegt daran, dass das Go-Sprachtest-Framework sie nicht unterstützt. 🎜🎜Allerdings können wir Reflektion nutzen, um Funktionen mit variablen Parametern dynamisch aufzurufen. Der folgende Code zeigt, wie man hierfür eine Testhilfsfunktion erstellt: 🎜rrreee🎜Diese Hilfsfunktion ruft die Funktion sumNumbers dynamisch mithilfe der Methode CallSlice auf und übergibt einen [ ] int Slice als Argument. 🎜

Das obige ist der detaillierte Inhalt vonKönnen variadische Golang-Parameter in Unit-Tests verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn