Метод testing.T.Errorf

Метод T.Errorf выполняет форматирование строки с использованием стандартных правил пакета fmt и записывает результат в журнал теста. После вызова этого метода тест помечается как неудачный, но выполнение продолжается. В отличие от T.Fatalf, метод T.Errorf не останавливает выполнение текущей функции теста. Первым параметром метод принимает строку формата, а последующими - значения для подстановки в формат.

Синтаксис

got.Errorf(format string, args ...interface{})

Пример

Давайте проверим функцию, которая возвращает сумму двух чисел. При несовпадении ожидаемого значения используем T.Errorf:

gopackage main

import "testing"

func TestSum(t *testing.T) {
  res := sum(2, 3)
  expected := 5
  if res != expected {
    t.Errorf("sum(2, 3) = %d; want %d", res, expected)
  }
}

Пример

Если необходимо выполнить несколько проверок в одном тесте, T.Errorf позволяет продолжить тестирование после обнаружения ошибки. Рассмотрим пример:

gopackage main

import (
  "testing"
)

func TestMultipleChecks(t *testing.T) {
  vals := []int{1, 2, 3, 4, 5}
  for i, v := range vals {
    if v%2 == 0 {
      t.Errorf("value at index %d is even: %d", i, v)
    }
  }
}

Пример

Метод T.Errorf поддерживает все форматы вывода пакета fmt. Посмотрим на использование разных спецификаторов:

gopackage main

import "testing"

func TestFormatting(t *testing.T) {
  name := "Alice"
  age := 30
  score := 95.5
  t.Errorf("name: %s, age: %d, score: %.1f", name, age, score)
}

Пример

Рассмотрим ситуацию, когда T.Errorf используется внутри вспомогательной функции для логирования ошибок:

gopackage main

import "testing"

func checkValue(t *testing.T, value int, expected int) {
  if value != expected {
    t.Errorf("checkValue: got %d, want %d", value, expected)
  }
}

func TestWithHelper(t *testing.T) {
  checkValue(t, 10, 10)
  checkValue(t, 20, 20)
  checkValue(t, 30, 25)
}

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

  • метод testing.T.Logf,
    который выполняет форматированное логирование без пометки теста как неудачного
  • метод testing.T.Fatalf,
    который останавливает выполнение теста после логирования ошибки
  • метод testing.T.Error,
    который выполняет логирование без форматирования и помечает тест как неудачный
  • метод testing.T.Log,
    который выполняет простое логирование без форматирования