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

我正在用sqlmockin编写测试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)


RISEBY
浏览 198回答 1
1回答

温温酱

快速浏览一下源代码表明该实例无法重复使用,您将必须创建与sqlmock.Rows您期望的选择查询一样多的实例。每次您的代码调用Next实例sql.Rows时,无论是直接还是间接,位置sqlmock.Rows都会增加,因此......第二个查询没有更多行要扫描。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go