Тип testing.T

Тип testing.T передается как параметр в каждую тестовую функцию, начинающуюся с префикса Test. Он предоставляет методы для управления выполнением теста: логирования сообщений, пропуска, отметки о неудаче и завершения теста досрочно. Экземпляр testing.T позволяет получать информацию о текущем тесте и управлять его состоянием.

Синтаксис

Тестовая функция всегда должна иметь следующий синтаксис:

gofunc TestName(t *testing.T) {
  // тело теста
}

Пример

Давайте напишем простой тест, который проверяет, что результат функции равен ожидаемому значению:

gopackage main

import (
  "testing"
)

func TestSum(t *testing.T) {
  res := 2 + 2
  if res != 4 {
    t.Errorf("Sum is incorrect: got %d, want %d", res, 4)
  }
}

Метод Errorf

Метод Errorf логирует сообщение об ошибке, но продолжает выполнение теста. Вызов этого метода отмечает тест как неудачный, но не останавливает его выполнение.

gopackage main

import (
  "testing"
)

func TestDivide(t *testing.T) {
  res := 10 / 2
  if res != 4 {
    t.Errorf("Divide is incorrect: got %d, want %d", res, 4)
  }
}

Результат выполнения кода при ошибке:

go"Divide is incorrect: got 5, want 4"

Метод Fatal

Метод Fatal завершает выполнение теста немедленно и логирует сообщение. Используйте его, когда дальнейшее выполнение теста невозможно из-за критической ошибки.

gopackage main

import (
  "testing"
)

func TestFatalExample(t *testing.T) {
  res := 1 / 0 // ошибка в вычислениях
  if res != 1 {
    t.Fatal("test stopped due to critical error")
  }
}

Результат выполнения кода:

go"test stopped due to critical error"

Метод Log

Метод Log выводит сообщение в журнал теста, но не влияет на его прохождение. Полезно для отладки и дополнительной информации во время выполнения теста.

gopackage main

import (
  "testing"
)

func TestLogExample(t *testing.T) {
  t.Log("Starting test")
  res := 5 * 5
  t.Log("Result is", res)
  if res != 25 {
    t.Error("Multiplication is incorrect")
  }
}

Результат выполнения кода:

go"Starting test"
"Result is 25"

Метод Skip

Метод Skip пропускает тест с указанным сообщением. Используйте его, когда тест не должен выполняться при определенных условиях (например, если не настроено окружение).

gopackage main

import (
  "testing"
)

func TestSkipExample(t *testing.T) {
  if true {
    t.Skip("Skipping test due to condition")
  }
  // код теста
}

Результат выполнения кода:

go"Skipping test due to condition"

Метод Parallel

Метод Parallel сообщает тестовому раннеру, что данный тест может выполняться параллельно с другими тестами. Он должен вызываться внутри тестовой функции для разрешения параллельного выполнения.

gopackage main

import (
  "testing"
  "time"
)

func TestParallelExample(t *testing.T) {
  t.Parallel()
  time.Sleep(100 * time.Millisecond)
  // проверка
}

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

  • метод testing.T.Errorf,
    который логирует ошибку, но продолжает выполнение теста
  • метод testing.T.Fatal,
    который немедленно завершает выполнение теста при критической ошибке
  • метод testing.T.Logf,
    который выводит отформатированное сообщение в журнал теста
  • метод testing.T.Skipf,
    который пропускает тест с отформатированным сообщением