You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 20:52:43