РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
955 of 1593 menu

Метод testing.T.Fatalf

Метод testing.T.Fatalf используется для логирования фатальной ошибки в тестах Go. Он принимает строку формата и аргументы для подстановки, работая аналогично fmt.Printf. После вызова этого метода тест немедленно завершается, а все последующие проверки в текущей функции теста не выполняются.

В первый параметр передается строка шаблона с заполнителями вида %v, %d или другими спецификаторами из пакета fmt. Во второй параметр и далее передаются значения, которые будут подставлены в шаблон. Метод полезен для вывода детализированных сообщений об ошибках с конкретными значениями переменных.

Синтаксис

t.Fatalf(format string, args ...interface{})

Пример

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

package main import ( "testing" ) func sum(a, b int) int { return a + b } func TestSum(t *testing.T) { result := sum(10, 20) expected := 30 if result != expected { t.Fatalf("sum(%d, %d) = %d; expected %d", 10, 20, result, expected) } }

Если тест завершится ошибкой, в выводе будет сообщение:

"sum(10, 20) = 25; expected 30"

Пример

Продемонстрируем использование t.Fatalf с несколькими типами данных при тестировании функции деления на ноль:

package main import ( "fmt" "testing" ) func divide(a, b int) (int, error) { if b == 0 { return 0, fmt.Errorf("division by zero") } return a / b, nil } func TestDivide(t *testing.T) { testCases := []struct { name string a int b int want int }{ {"positive", 10, 2, 5}, {"negative", -10, 2, -5}, {"zero denominator", 10, 0, 0}, } for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { got, err := divide(tc.a, tc.b) if err != nil { t.Fatalf("divide(%d, %d) returned error: %v", tc.a, tc.b, err) } if got != tc.want { t.Fatalf("divide(%d, %d) = %d; want %d", tc.a, tc.b, got, tc.want) } }) } }

При выполнении теста с ошибкой будет выведено сообщение:

"divide(10, 0) returned error: division by zero"

Пример

Рассмотрим ситуацию, где необходимо проверить наличие элемента в слайсе. Если элемент отсутствует, тест должен завершиться:

package main import ( "testing" ) func contains(s []string, elem string) bool { for _, e := range s { if e == elem { return true } } return false } func TestContains(t *testing.T) { slice := []string{"a", "b", "c", "d", "e"} elem := "z" if !contains(slice, elem) { t.Fatalf("slice %v does not contain element %q", slice, elem) } }

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

"slice [a b c d e] does not contain element \"z\""

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

  • метод testing.T.Fatal,
    который логирует сообщение без форматирования и завершает тест
  • метод testing.T.Errorf,
    который логирует отформатированную ошибку, но не завершает тест
  • метод testing.T.Error,
    который логирует ошибку без форматирования и не завершает тест
  • метод testing.T.Logf,
    который логирует отформатированное сообщение без ошибки
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить