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 de Golang peuvent-ils être utilisés dans les tests unitaires ?

PHPz
PHPzoriginal
2024-04-29 18:09:02495parcourir

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)).

Les paramètres variadiques de Golang peuvent-ils être utilisés dans les tests unitaires ?

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

🎜Pratique🎜🎜🎜Le code suivant démontre l'utilisation des paramètres variables : 🎜rrreee🎜🎜Paramètres variables dans les tests unitaires🎜🎜🎜Les paramètres variables ne peuvent pas être transmis directement dans les tests unitaires. En effet, le framework de test linguistique Go ne les prend pas en charge. 🎜🎜Cependant, nous pouvons utiliser la réflexion pour appeler dynamiquement des fonctions avec des paramètres variables. Le code suivant montre comment créer une fonction d'assistance de test pour cela : 🎜rrreee🎜Cette fonction d'assistance appelle dynamiquement la fonction 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn