使用testify/suite编写Go子测试时如何消除未使用参数Lint警告
解决testify/suite子测试的Lint警告与语法错误问题
针对你遇到的问题,有几个简单可行的解决办法:
1. 用下划线忽略未使用的t参数
Go语言允许用下划线_标记未使用的参数,这样Lint工具就不会报“未使用参数”的警告,同时语法完全合法。修改后的代码如下:
func (us *UnitSuite) TestSomething() { for i := range testVars { i := i us.T().Run(testVars[i].name, func(_ *testing.T) { // 直接使用suite的断言方法或us.T()即可 us.Equal(testVars[i].expected, yourTestFunction(testVars[i].input)) }) } }
2. 实际使用子测试的t参数
如果子测试里需要用到testing.T的方法(比如单独标记子测试失败、打印日志),直接使用这个t参数即可,参数被使用后Lint警告会自动消失。比如结合testify断言库的写法:
func (us *UnitSuite) TestSomething() { for i := range testVars { i := i us.T().Run(testVars[i].name, func(t *testing.T) { result := yourTestFunction(testVars[i].input) // 将t作为断言方法的参数 assert.Equal(t, testVars[i].expected, result) // 或者直接调用t的原生方法 if result != testVars[i].expected { t.Fatalf("用例[%s]失败:预期%v,实际%v", testVars[i].name, testVars[i].expected, result) } }) } }
关于你之前的语法错误说明
us.T()是一个方法调用,它返回的是*testing.T类型的值,但子测试的函数参数要求的是类型声明,所以不能写成func(us.T())。Run方法的定义要求子测试函数必须是func(t *testing.T)类型,这个参数类型无法修改。
内容的提问来源于stack exchange,提问作者pkaramol
相关产品推荐
相关产品推荐

