Pull to refresh

Comments 9

в основной поставке Go, есть готовый инструмент для таких нужд: называется FakeDb.


import (
    .......
    "github.com/a1div0/fakedb"
)


Точно прям в стандартной библиотеке?
Всё же готового инструмента в стандартной библиотеке нет. Есть только файл с тестами. Поэтому, считаю, что первые абзацы всё таки вводят читателя в заблуждение.
Впрочем, то, что вы создали пакет из этого файла, я упустил. Тогда статью вполне можно считать полезной и попробовать ваш пакет при случае.

Не хочу вводить кого-то в заблуждение, поэтому изменил абзац:


Захотел поделиться с сообществом своей находкой: в основной поставке Go, есть почти готовый инструмент для таких нужд: называется FakeDb.

Спасибо за обратную связь.

Есть же dockertest — не совсем эмуляция, но результат будет уже на 99% соответствовать ожиданиям, например, тот же postgres в dockertest инициализируется секунд за 5-7, не супер быстро, но как компромисс вполне.
Это ещё одна инфраструктурная зависимость, от которых предлагает избавляться в тестировании автор.
Я, например, тоже контейнеры использую редко.
Я для тестов использую такую связку: github.com/stretchr/testify/suite + github.com/DATA-DOG/go-sqlmock. Это позволяет прозрачно протестировать все ожидаемые запросы к базе с разными диалектами.

source, mock, _ := sqlmock.New()
db, _ := gorm.Open("mysql", source)
mock.ExpectBegin()
mock.ExpectQuery("SELECT ...").WillReturnRows(...)
mock.ExpectCommit()
db.Find(...)

etc… Надеюсь кому-нибудь будет полезно) По идее, вместо gorm можно использовать FakeDb.
Я использую xorm, который поддерживает sqlite, т.ч. в разработке для запуска тестов использую либо sqlite с базой в памяти, либо локальный postgres, а на прогонке тестов на дроне поднимаю в докере и postgres, и mysql.
Sign up to leave a comment.

Articles

Change theme settings