🟡 Средний · 2 очк. Тестирование
Что такое testing.TB?
A Интерфейс для табличных тестов
B Общий интерфейс для *testing.T и *testing.B
C Тестовый буфер
D Тип для table-driven тестов
Объяснение вопроса

testing.TB - интерфейс, который реализуют и *testing.T (тесты), и *testing.B (бенчмарки). Содержит общие методы: Error, Fatal, Log, Helper, Cleanup.

Зачем нужен

Чтобы писать вспомогательные функции, работающие и в тестах, и в бенчмарках, не дублируя код.

func setupDB(tb testing.TB) *DB {
    tb.Helper()
    db, err := sql.Open(...)
    if err != nil {
        tb.Fatal(err)
    }
    tb.Cleanup(func() { db.Close() })
    return db
}
func TestX(t *testing.T) { db := setupDB(t); ... }
func BenchmarkY(b *testing.B) { db := setupDB(b); ... }

tb.Helper() помечает функцию как хелпер - при падении теста строка будет указана в месте вызова, а не внутри setupDB.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.