У dockertest вышло мажорное обновление, быстро смотрим под капот.
Автоматическая очистка через
t.CleanupВ v3 нужно было явно вызывать
defer pool.Purge(resource). В v4 NewPoolT регистрирует очистку автоматически. Контейнеры удаляются при завершении теста без единой строки дополнительного кода.Переиспользование контейнеров по умолчанию
Контейнеры с одинаковым
repository:tag автоматически шарятся между тестами в рамках одного запуска. Это существенно ускоряет локальную разработку. Отключается через WithoutReuse(), а для одного образа с разными конфигами WithReuseID("my-key").Функциональные опции вместо
RunOptions// v3
pool.RunWithOptions(&dockertest.RunOptions{
Repository: "postgres",
Tag: "14",
Env: []string{"POSTGRES_PASSWORD=secret"},
})
// v4
pool.RunT(t, "postgres",
dockertest.WithTag("14"),
dockertest.WithEnv([]string{"POSTGRES_PASSWORD=secret"}),
)
Context везде
pool.Retry теперь принимает context.Context и явный таймаут:// v3
pool.Retry(func() error { return db.Ping() })
// v4
pool.Retry(t.Context(), 30*time.Second, func() error { return db.Ping() })
Лёгкий клиент и безопасность
v3 тащил за собой 6000+ строк вендорного Docker-клиента с известными CVE. v4 использует официальный Moby-клиент — зависимости стали значительно чище.
Sentinel errors
Вместо строковых ошибок — типизированные:
if errors.Is(err, dockertest.ErrImagePullFailed) { ... }
if errors.Is(err, dockertest.ErrContainerStartFailed) { ... }Миграция:
go get github.com/ory/dockertest/v4
# Обновить импорты
find . -name "*.go" -exec sed -i \
's|github.com/ory/dockertest/v3|github.com/ory/dockertest/v4|g' {} \;
➡️ Полный гайд по миграции
🔗 Источник
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoLive