Добрый день всем!
пишу unit тесты для своего api. Для тестирования postgreSQL использую библиотеку "github.com/DATA-DOG/go-sqlmock"
С очередями SELECT все работает, все тестирует, все ок.
А с командой INSERT не получается ничего. Выдает ошибку и все.
Метод, который пытаюсь протестировать создает запись в базе.
func (pdb *PostgresDB) CreateUser(u models.User) (models.User, error) {
pdb.mu.Lock()
defer pdb.mu.Unlock()
id := uuid.New()
idStr := id.String()
_, err := pdb.Pdb.Exec(
`INSERT INTO users (userID, name, age) VALUES ($1, $2, $3)`, idStr, u.Name, u.Age)
if err != nil {
return models.User{}, errors.New("couldn't create user in database")
}
u.ID = idStr
return u, nil
}
соответственно код, который должен добавить запись в базу следующий:
mock.ExpectBegin()
mock.ExpectExec(regexp.QuoteMeta(`INSERT INTO users`)).
WithArgs("00000000-0000-0000-0000-000000000000", "name1", 10).
WillReturnResult(sqlmock.NewResult(1, 1))
//mock.ExpectQuery(regexp.QuoteMeta(`INSERT INTO "users" \(userID, name, age\) VALUES \(\$1, \$2, \$3\)`)).
// WithArgs("00000000-0000-0000-0000-000000000000", "name1", 10).
// WillReturnRows(mockedRow)
mock.ExpectCommit()
Уже пробовал и менять mock.ExpectExec на mock.ExpectQuerry - не помогло. В результат давал вот это
mockedRow := sqlmock.NewRows([]string{"userID", "name", "age"}).AddRow("00000000-0000-0000-0000-000000000000", "name1", 10)
Убирал regexp.QuoteMeta, Вставлял полную команду как и в рабочем коде - ничего не помогает.
Понимаю, что где-то тут ошибка у меня в этом описании мока, но не могу понять где. Begin и Commit убирал ничего не помогает.
Не пойму куда копать...
Буду благодарен за любую подсказку.
Заранее спасибо