go - 对多个预期查询使用相同的预期行仅返回带有 sqlmock 的第一个查询的结果
问题描述
我正在用sqlmock
in编写测试go
。我有一个行列表(例如myRows
)和两个不同的SELECT
语句,我想将它们myRows
用作WillReturnRows
它们的参数:
myRows := sqlmock.NewRows([]string{"my_column"}).AddRow(1)
mock.ExpectQuery(firstQuery).WillReturnRows(myRows)
mock.ExpectQuery(secondQuery).WillReturnRows(myRows)
当我在 first 中使用它时,它会作为结果WillReturnRows
返回。1
但是在第二种用法中,没有任何行作为结果返回;我的意思是空行返回。我打印了myRows
第一次通话之前和之后,以检查它是否已被消耗;对象没有变化:
Rows Before: &{[my_column] [[1]] 0 map[] <nil>}
Rows After: &{[my_column] [[1]] 0 map[] <nil>}
编辑1:
我使用了以下代码,它可以工作;这意味着两个查询都返回1
:
myRows1 := sqlmock.NewRows([]string{"my_column"}).AddRow(1)
myRows2 := sqlmock.NewRows([]string{"my_column"}).AddRow(1)
mock.ExpectQuery(firstQuery).WillReturnRows(myRows1)
mock.ExpectQuery(secondQuery).WillReturnRows(myRows2)
解决方案
快速浏览一下源代码表明该实例无法重复使用,您将必须创建与sqlmock.Rows
您期望的选择查询一样多的实例。每次您的代码调用Next
实例sql.Rows
时,无论是直接还是间接,in 的位置sqlmock.Rows
都会增加,因此……第二个查询没有更多行要扫描。
推荐阅读
- npm-install - 如何修复 Gridsome.js 中的错误?
- javascript - 这些反应出口有什么区别?
- sql - 多表小计
- audit.net - 什么是默认行为 InsertEvent 或 InsertEventAsync
- serverless-framework - 无服务器:TypeError:无法读取未定义的属性“阶段”
- flutter - 如何在颤动中垂直和水平地居中 CircularProgressIndicator
- mysql - 存储过程MYSQL中的减法
- autodesk-viewer - 我们可以在 Forge Viewer 上加载和可视化的任何限制(文件大小或占地面积或层数)?
- javascript - setTimeout 在 addEventListener 中让应用每 100 个 addEventListener 事件休息一下
- notepad++ - Notepad++ 目录替换