首页 > 后端开发 > Golang > 在不实例化类型参数的情况下,如何有效地对 Go 中的泛型函数进行表测试?

在不实例化类型参数的情况下,如何有效地对 Go 中的泛型函数进行表测试?

DDD
发布: 2024-12-04 11:09:10
原创
877 人浏览过

How Can We Effectively Table Test Generic Functions in Go Without Instantiating Type Parameters?

在 Go 中测试泛型函数

挑战:

Go 1.18 引入了泛型,但是如何有效地对泛型进行表测试当 T 无法实例化时的函数

问题陈述:

由于无法实例化 T 值,当前的测试方法需要重新声明每个函数的测试逻辑。

方法:

测试方法应侧重于重用常见的逻辑,同时考虑泛型函数的具体性质。

解决方案:

1.可重用的测试逻辑:

创建一个通用的测试函数,例如 runTestCase[T Item](tc testCase[T]),它封装了设置测试和验证结果等常见操作。

2。实例化注意事项:

泛型函数最终必须使用特定类型进行实例化。但是,没有必要测试每个可能的类型参数。

3.专注于类型特定的行为:

仅当特定类型的行为因运算符语义而不同时,才专注于测试特定类型的函数。例如,数字和字符串的运算符,或者数字和字符串的比较运算符。

示例:

此测试代码使用通用 runTestCase 函数来测试不同类型商店地图中的值的数量:

func TestStore(t *testing.T) {
    t.Run("ints", testInt)
    t.Run("strings", testString)
}

func testString(t *testing.T) {
    t.Parallel()
    tests := []testCase[string]{
        {
            start:    store[string]{},
            key:      123,
            val:      "test",
            expected: store[string]{123: "test"},
        },
        // ...
    }
    for _, tc := range tests {
        t.Run(tc.name, runTestCase(tc))
    }
}

func testInt(t *testing.T) {
    t.Parallel()
    tests := []testCase[int]{
        {
            start:    store[int]{},
            key:      123,
            val:      456,
            expected: store[int]{123: 456},
        },
        // ...
    }
    for _, tc := range tests {
        t.Run(tc.name, runTestCase(tc))
    }
}
登录后复制

以上是在不实例化类型参数的情况下,如何有效地对 Go 中的泛型函数进行表测试?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板