簡體   English   中英

對多個預期查詢使用相同的預期行只為第一個使用 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使用它時,它返回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實例。 每次您的代碼在sql.Rows實例上調用Next時,無論是直接還是間接, sqlmock.Rows的位置都會增加,因此……第二個查詢沒有更多行要掃描。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM