#unit-testing #go #mocking #sqlboiler
#модульное тестирование #Вперед #издевательство #sqlboiler
Вопрос:
Здесь я пытался выяснить, как имитировать запросы sqlboiler (генератор ORM), но не смог найти способ.
Может ли кто-нибудь обойти имитацию запросов sqlboiler?
Пример:
func (m *Message) updateDevice(parentID int, data map[string]interface{}) (rows int64, err error) {
rows, err = automodel.Devices(qm.Where(automodel.DeviceColumns.ParentID "=?", parentID)).UpdateAll(context.Background(), db.GetMaster(), data)
if err != nil {
return 0, err
}
return rows, err
}
func GetDeviceByID(ID int) (res *automodel.Device, err error) {
res, err = automodel.Devices(qm.Where("id=?", ID)).One(context.Background(), db.GetSlave())
if err != nil {
return nil, err
}
return res, nil
}
К вашему СВЕДЕНИЮ: automodel — это пакет, в котором присутствуют все сгенерированные модели (например, device.go
для таблицы устройств). Мы не можем их изменить, поскольку они генерируются командой sqlboiler, и их необходимо сгенерировать заново, если добавляются новые таблицы или с таблицей происходит изменение схемы.
Как мне имитировать запросы sqlboiler двумя вышеупомянутыми методами при написании модульных тестов?
Комментарии:
1. Макет мнения IMO не будет правильным способом для сгенерированного SQL или любых сложных запросов SQL. Возможно, что вы повторно сгенерируете код, и это сломает все ваши макеты. Обычно я настраиваю реальную базу данных с помощью docker и запускаю модульные тесты против нее. Это гораздо более простой подход.