Использование одинаковых ожидаемых строк для нескольких ожидаемых запросов возвращает результат только для первой с sqlmock - PullRequest
0 голосов
/ 02 февраля 2020

Я пишу тесты с 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)

1 Ответ

1 голос
/ 02 февраля 2020

Быстрый взгляд на источник показывает, что экземпляр нельзя использовать повторно, вам придется создать столько экземпляров sqlmock.Rows, сколько ожидающих запросов на выборку. Каждый раз, когда ваш код вызывает Next в экземпляре sql.Rows, прямо или косвенно, позиция в sqlmock.Rows увеличивается, и поэтому ... во втором запросе больше нет строк для сканирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...