t.Cleanup(fn) регистрирует функцию, которая выполнится после завершения теста (включая подтесты). Порядок выполнения - LIFO (как defer). Удобнее defer при использовании хелперов: хелпер может зарегистрировать очистку, не возвращая ресурс вызывающему. Рекомендуется вместо отдельного tearDown в табличных тестах.
func setup(t *testing.T) *DB {
db := openDB(t)
t.Cleanup(func() { db.Close() })
return db
}