>백엔드 개발 >Golang >단위 테스트에 golang 가변 매개변수를 사용할 수 있나요?

단위 테스트에 golang 가변 매개변수를 사용할 수 있나요?

PHPz
PHPz원래의
2024-04-29 18:09:02542검색

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

🎜실용🎜🎜🎜다음 코드는 변수 매개변수의 사용을 보여줍니다. 🎜rrreee🎜🎜단위 테스트의 변수 매개변수🎜🎜🎜변수 매개변수는 단위 테스트에서 직접 전달될 수 없습니다. 이는 Go 언어 테스트 프레임워크가 이를 지원하지 않기 때문입니다. 🎜🎜그러나 리플렉션을 사용하여 변수 매개변수가 있는 함수를 동적으로 호출할 수 있습니다. 다음 코드는 이에 대한 테스트 도우미 함수를 생성하는 방법을 보여줍니다. 🎜rrreee🎜이 도우미 함수는 CallSlice 메서드를 사용하여 sumNumbers 함수를 동적으로 호출하고 [ ] int 슬라이스를 매개변수로 사용합니다. 🎜

위 내용은 단위 테스트에 golang 가변 매개변수를 사용할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.