TGViewer
BASCODE BASCODE @bascodech · 140 subscribers
Post #50 267
Недавно начал писать unit-тесты для storage слоёв.

PostgreSQL, Redis, всякие внешние хранилища. То, что обычно остаётся без покрытия, потому что "ну там же база, как это тестировать без базы?", ну или интеграционные/e2e тесты.

Сегодня напишу про PostgreSQL. Использую github.com/pashagolub/pgxmock/v4. 500+ звезд, мокает интерфейс pgx, репозиторий думает что работает с базой.

Выглядит все просто:
mock, _ := pgxmock.NewPool()

// SELECT
rows := mock.NewRows([]string{"id", "name"}).
AddRow(1, "Дима")
mock.ExpectQuery("SELECT").WillReturnRows(rows)

// INSERT
mock.ExpectExec("INSERT INTO users").
WithArgs("Дима", "dima@mail.com").
WillReturnResult(pgxmock.NewResult("INSERT", 1))

// Ошибка
mock.ExpectQuery("SELECT").
WillReturnError(errors.New("connection refused"))


Что проверяем: SQL запросы, параметры, обработку ошибок, маппинг в структуры.

Что НЕ проверим: реальную работу SQL, совместимость с версией PG, производительность. Для этого нужны интеграционные или e2e тесты.

https://github.com/pashagolub/pgxmock

Поставьте автору звездочку на github, если моки вам полезны. Ему будет приятно 😊
  • ❤ 5
More from @bascodech
  1. Sep 18, 2026Мысли про дебаггинг и IDE в 2026 Вот интересная история... Расс Кокс выложил пять сессий,…
  2. Sep 14, 2026Кодить без AI сейчас как заниматься айкидо. Красиво и глубоко и десять лет до черного пояс…
  3. Sep 7, 2026Выложил свой statusline для claude code в публичный репозиторий. Лимитов у подписки три: п…
  4. Sep 5, 2026Рубрика "лысая мудрость" Как я больше года храбро готовился, но так ничего и не сделал. Вт…
  5. Sep 2, 2026Распаковал 30 релизов Go подряд, 2.9 ГБ исходников. Ради одного вопроса. Вопрос такой: поч…
  6. Aug 29, 2026Сегодня у кого-то будет распаковка :-)
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →