Метод T.Error

Метод Error типа *testing.T предназначен для логирования сообщений об ошибках в тестах. Он принимает аргументы, аналогичные fmt.Print, и помечает текущий тест как проваленный, но при этом не прерывает его выполнение. В отличие от Fatal, который останавливает выполнение теста, Error позволяет выполнить оставшиеся проверки, что удобно для сбора всех ошибок за один запуск.

Синтаксис

got.Error(args ...interface{})

Метод принимает произвольное количество аргументов любого типа и форматирует их аналогично fmt.Print. Для форматированного вывода используйте метод Errorf.

Пример 1

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

gopackage main

import (
  "testing"
)

func TestAdd(t *testing.T) {
  result := 2 + 2
  expected := 5

  if result != expected {
    t.Error("Add returned", result, "expected", expected)
  }
}

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

go--- FAIL: TestAdd (0.00s)
  main_test.go:10: Add returned 4 expected 5

Пример 2

В этом примере показано, как Error не останавливает выполнение теста. Мы проверяем несколько условий, и даже если первое не выполняется, тест продолжает работу:

gopackage main

import (
  "testing"
)

func TestMultipleChecks(t *testing.T) {
  values := []int{1, 2, 3, 4, 5}
  for i, v := range values {
    if v%2 == 0 {
      t.Error("Even value found at index", i, ":", v)
    }
  }
}

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

go--- FAIL: TestMultipleChecks (0.00s)
  main_test.go:9: Even value found at index 1 : 2
  main_test.go:9: Even value found at index 3 : 4

Пример 3

Использование Error вместе с выводом дополнительной информации о состоянии теста. Это помогает быстрее понять причину ошибки:

gopackage main

import (
  "strings"
  "testing"
)

func TestContains(t *testing.T) {
  str := "hello world"
  sub := "world"

  if !strings.Contains(str, sub) {
    t.Error("String", str, "does not contain", sub)
  }

  sub = "golang"
  if strings.Contains(str, sub) {
    t.Error("String", str, "unexpectedly contains", sub)
  }
}

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

go--- FAIL: TestContains (0.00s)
  main_test.go:12: String hello world unexpectedly contains golang

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

  • метод T.Errorf,
    который логирует форматированное сообщение об ошибке
  • метод T.Fatal,
    который останавливает выполнение теста после логирования ошибки
  • метод T.Log,
    который выводит информационное сообщение без пометки теста как проваленного
  • метод T.Fail,
    который просто помечает тест как проваленный без вывода сообщения