Метод T.Error
Метод Error типа *testing.T предназначен для логирования сообщений об ошибках в тестах. Он принимает аргументы, аналогичные fmt.Print, и помечает текущий тест как проваленный, но при этом не прерывает его выполнение. В отличие от Fatal, который останавливает выполнение теста, Error позволяет выполнить оставшиеся проверки, что удобно для сбора всех ошибок за один запуск.
Синтаксис
t.Error(args ...interface{})
Метод принимает произвольное количество аргументов любого типа и форматирует их аналогично fmt.Print. Для форматированного вывода используйте метод Errorf.
Пример 1
Рассмотрим простой тест, который проверяет функцию сложения. Если результат не совпадает с ожидаемым, мы логируем ошибку с помощью Error:
package main
import (
"testing"
)
func TestAdd(t *testing.T) {
result := 2 + 2
expected := 5
if result != expected {
t.Error("Add returned", result, "expected", expected)
}
}
Результат выполнения теста:
--- FAIL: TestAdd (0.00s)
main_test.go:10: Add returned 4 expected 5
Пример 2
В этом примере показано, как Error не останавливает выполнение теста. Мы проверяем несколько условий, и даже если первое не выполняется, тест продолжает работу:
package 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)
}
}
}
Результат выполнения теста:
--- 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 вместе с выводом дополнительной информации о состоянии теста. Это помогает быстрее понять причину ошибки:
package 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)
}
}
Результат выполнения теста:
--- FAIL: TestContains (0.00s)
main_test.go:12: String hello world unexpectedly contains golang
Смотрите также
-
метод
T.Errorf,
который логирует форматированное сообщение об ошибке -
метод
T.Fatal,
который останавливает выполнение теста после логирования ошибки -
метод
T.Log,
который выводит информационное сообщение без пометки теста как проваленного -
метод
T.Fail,
который просто помечает тест как проваленный без вывода сообщения