对多个预期查询使用相同的预期行 returns 结果仅适用于 sqlmock 的第一个
Using same expected rows for multiple expected queries returns result just for the first one with sqlmock
我正在 go
中用 sqlmock
编写测试。我有一个行列表(例如 myRows
)和两个不同的 SELECT
语句,我想使用 myRows
作为它们两个的 WillReturnRows
参数:
myRows := sqlmock.NewRows([]string{"my_column"}).AddRow(1)
mock.ExpectQuery(firstQuery).WillReturnRows(myRows)
mock.ExpectQuery(secondQuery).WillReturnRows(myRows)
当我在第一个 WillReturnRows
中使用它时,结果是 returns 1
。但是在第二次使用中,没有行被 returned 作为结果;我的意思是空行 returns。我在第一次调用前后打印了 myRows
以检查它是否已被消耗;对象没有变化:
Rows Before: &{[my_column] [[1]] 0 map[] <nil>}
Rows After: &{[my_column] [[1]] 0 map[] <nil>}
编辑 1:
我使用了下面的代码并且有效;这意味着两个查询 return 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 表明该实例无法重复使用,您必须创建与 select 查询一样多的 sqlmock.Rows
实例你期待。每次您的代码在 sql.Rows
实例上调用 Next
时,无论是直接还是间接,sqlmock.Rows
中的位置都会递增,因此......第二个查询没有更多行可以扫描。
我正在 go
中用 sqlmock
编写测试。我有一个行列表(例如 myRows
)和两个不同的 SELECT
语句,我想使用 myRows
作为它们两个的 WillReturnRows
参数:
myRows := sqlmock.NewRows([]string{"my_column"}).AddRow(1)
mock.ExpectQuery(firstQuery).WillReturnRows(myRows)
mock.ExpectQuery(secondQuery).WillReturnRows(myRows)
当我在第一个 WillReturnRows
中使用它时,结果是 returns 1
。但是在第二次使用中,没有行被 returned 作为结果;我的意思是空行 returns。我在第一次调用前后打印了 myRows
以检查它是否已被消耗;对象没有变化:
Rows Before: &{[my_column] [[1]] 0 map[] <nil>}
Rows After: &{[my_column] [[1]] 0 map[] <nil>}
编辑 1:
我使用了下面的代码并且有效;这意味着两个查询 return 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 表明该实例无法重复使用,您必须创建与 select 查询一样多的 sqlmock.Rows
实例你期待。每次您的代码在 sql.Rows
实例上调用 Next
时,无论是直接还是间接,sqlmock.Rows
中的位置都会递增,因此......第二个查询没有更多行可以扫描。