go - 对多个预期查询使用相同的预期行将仅使用sqlmock返回第一个查询的结果

标签 go testing go-sqlmock

我正在使用sqlmock中的go编写测试。我有一个行列表(例如myRows)和两个不同的SELECT语句,我想将myRows用作它们的WillReturnRows参数:

myRows := sqlmock.NewRows([]string{"my_column"}).AddRow(1)
mock.ExpectQuery(firstQuery).WillReturnRows(myRows)
mock.ExpectQuery(secondQuery).WillReturnRows(myRows)

当我在第一个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)

最佳答案

快速浏览source表示该实例无法重复使用,您将需要创建与您期望的选择查询一样多的sqlmock.Rows实例。每次您的代码直接或间接调用Next实例上的sql.Rows时,sqlmock.Rows中的位置都会增加,因此...第二个查询不再有要扫描的行。

关于go - 对多个预期查询使用相同的预期行将仅使用sqlmock返回第一个查询的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60024196/

相关文章:

unit-testing - Go sqlmock SELECT 缺少预期的查询

go - slice 或数组是否充当全局范围?

go - 未指定 cgo SDL 函数

ruby-on-rails - 使用 pgTAP 框架来测试 postgresql 函数是一种好方法吗?

go - SQLMock 和 Gorm : Mocking Postgres Insert

go - 从 go 二进制文件中的 TEXT 指令中删除文件路径

mongodb - 在 go 中同时使用相同的 mgo session

python - 如何使用 httpretty/sure 执行 python 测试

wcf - 如何模拟 WCF 服务的负载平衡环境?