Интерфейс testing.TB

Интерфейс testing.TB является общим интерфейсом для типов testing.T и testing.B. Он предоставляет набор методов, которые позволяют управлять выполнением тестов и бенчмарков, выводить сообщения об ошибках, пропускать выполнение и получать информацию о состоянии. Первым параметром методы интерфейса принимают аргументы для форматирования сообщений, вторым - сообщение, которое нужно вывести.

Синтаксис

gotype 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 и может быть использована как в тестах, так и в бенчмарках:

gopackage 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 для пропуска выполнения в зависимости от условий:

gopackage 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 для освобождения ресурсов после завершения теста:

gopackage 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)
}

Смотрите также

  • тип testing.T,
    который используется для написания тестов
  • тип testing.B,
    который используется для написания бенчмарков
  • метод testing.TB.Error,
    который выводит сообщение об ошибке и помечает тест как проваленный
  • метод testing.TB.Log,
    который выводит сообщение в журнал тестирования