我正在使用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/