Как имитировать запросы sqlboiler в Go

#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 и запускаю модульные тесты против нее. Это гораздо более простой подход.