Интерфейс testing.TB
Интерфейс testing.TB является общим интерфейсом для типов
testing.T и testing.B. Он предоставляет набор методов,
которые позволяют управлять выполнением тестов и бенчмарков,
выводить сообщения об ошибках, пропускать выполнение и получать
информацию о состоянии. Первым параметром методы интерфейса
принимают аргументы для форматирования сообщений, вторым -
сообщение, которое нужно вывести.
Синтаксис
type TB interface {
Error(args ...any)
Errorf(format string, args ...any)
Fail()
FailNow()
Failed() bool
Fatal(args ...any)
Fatalf(format string, args ...any)
Helper()
Log(args ...any)
Logf(format string, args ...any)
Name() string
Skip(args ...any)
SkipNow()
Skipf(format string, args ...any)
Skipped() bool
TempDir() string
Cleanup(f func())
Setenv(key, value string)
Context() context.Context
Deadline() (deadline time.Time, ok bool)
}
Пример
Давайте напишем функцию, которая принимает testing.TB
и может быть использована как в тестах, так и в бенчмарках:
package main
import (
"testing"
)
func checkValue(tb testing.TB, val int) {
tb.Helper()
if val < 0 {
tb.Errorf("value %d is negative", val)
}
tb.Logf("checking value: %d", val)
}
func TestCheckValue(t *testing.T) {
checkValue(t, 10)
checkValue(t, -5)
}
func BenchmarkCheckValue(b *testing.B) {
for i := 0; i < b.N; i++ {
checkValue(b, i)
}
}
Пример
Рассмотрим использование метода Skip для пропуска выполнения
в зависимости от условий:
package main
import (
"os"
"testing"
)
func runTest(tb testing.TB) {
tb.Helper()
if os.Getenv("TEST_ENV") == "skip" {
tb.Skip("skipping test due to environment variable")
}
tb.Log("running test")
}
func TestRunTest(t *testing.T) {
runTest(t)
}
Пример
Использование метода Cleanup для освобождения ресурсов
после завершения теста:
package main
import (
"fmt"
"testing"
)
func withResource(tb testing.TB) {
tb.Helper()
tb.Cleanup(func() {
fmt.Println("cleaning up resources")
})
fmt.Println("using resources")
}
func TestWithResource(t *testing.T) {
withResource(t)
}