使用gomock测试时遇'aborting test due to missing call(s)'错误求助
解决Gomock测试中"missing call(s)"错误的排查步骤
1. 修正API请求路径
你的测试用例针对CashDepositAPI,但实际发送请求的URL是/sendCashWithdrawal,路径不匹配会导致目标handler完全不执行,自然不会触发GetAccountForUpdate和DepositTx的调用,这是最可能的核心问题。
修改请求URL为正确的存款API路径:
url := "/sendCashDeposit" // 替换为实际业务中存款接口的路径
2. 添加正确的请求头
你用json.Marshal生成了JSON请求体,但未设置Content-Type: application/json请求头,Gin框架无法正确解析请求参数,会跳过业务逻辑流程,导致mock方法未被调用。
添加请求头:
request.Header.Set("Content-Type", "application/json")
3. 验证Mock参数匹配逻辑
Gomock的gomock.Eq()是严格匹配,需确保buildStubs中定义的参数和实际代码传入的完全一致:
- 检查
DepositTxParams结构体的所有字段(包括未导出字段)是否匹配,若存在未导出字段,gomock.Eq()会匹配失败,可改用自定义匹配器或reflect.DeepEqual验证。 - 确认
amount等变量的类型、值是否和请求解析后的结果一致,避免类型转换或数值精度问题导致匹配失败。
可临时将匹配器改为gomock.Any()验证是否为参数匹配问题:
store.EXPECT().DepositTx(gomock.Any(), gomock.Any()).Times(1)
若测试通过,再逐步细化匹配条件。
4. 检查测试服务器路由注册
确认newTestServer函数中是否正确注册了存款API的路由,且HTTP方法(POST)与请求一致,避免因路由未注册导致handler不执行。
5. 打印请求响应日志排查
在测试中添加日志,确认请求是否正确到达目标handler:
// 发送请求前打印请求信息 t.Logf("Request URL: %s, Method: %s", request.URL, request.Method) t.Logf("Request Body: %s", string(data)) // 响应后打印响应信息 t.Logf("Response Code: %d", recorder.Code) t.Logf("Response Body: %s", recorder.Body.String())
内容的提问来源于stack exchange,提问作者ramshadows
相关产品推荐
相关产品推荐

