testing.TB?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.