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, если моки вам полезны. Ему будет приятно 😊
