Go语言pgxmock测试报错:参数类型不匹配问题求助
问题原因与解决方案
错误的核心是参数类型不匹配:
- pgxmock期望接收
uint8类型(单个字节),但实际代码传入的是完整字符串 - 问题出在
addRecordQuery的参数设置环节:
看这段出错的代码:
recordHash := string(hashKey[count]) // ... pgxMock.ExpectQuery(regexp.QuoteMeta(addRecordQuery)).WithArgs( 1, recordHash[count] // 这里是错误根源 ).WillReturnRows(...)
recordHash是string类型,recordHash[count]会返回该字符串的第count个字节(uint8类型)——比如第一次循环时count=0,取到的是字符串"c9d778419a8ce7"的第一个字符'c'(对应uint8值99),但你的业务代码插入recordHash字段时传的是完整hash字符串,因此导致期望参数和实际参数不匹配。
修复方法
把addRecordQuery的第二个参数改成完整的recordHash(或直接用hashKey[count]):
pgxMock.ExpectQuery(regexp.QuoteMeta(addRecordQuery)).WithArgs( 1, recordHash // 改为完整字符串 ).WillReturnRows(pgxmock.NewRows([]string{"recordId"}).AddRow(int64(1)))
额外建议:把count变量的初始化放到t.Run的闭包内部,避免多个测试用例共享count导致索引越界问题:
t.Run(tt.name, func(t *testing.T) { count := 0 // 移到闭包内,每个测试用例独立计数 pgxMock, err := pgxmock.NewPool() // ... 后续代码 })
内容的提问来源于stack exchange,提问作者KshanStag
相关产品推荐
相关产品推荐

