Метод testing.T.Helper
Метод testing.T.Helper сигнализирует системе тестирования Go,
что текущая функция является вспомогательной. Когда тест завершается
с ошибкой внутри такой функции, фреймворк отображает сообщение об
ошибке с указанием строки, где была вызвана вспомогательная функция,
а не строки внутри нее. Это значительно упрощает отладку, так как
разработчик видит реальное место проблемы в основном тесте.
Синтаксис
t.Helper()
Метод не принимает параметров и ничего не возвращает. Он вызывается внутри вспомогательной функции перед выполнением каких-либо проверок.
Пример
В этом примере мы создадим вспомогательную функцию для проверки
четности числа и используем t.Helper, чтобы ошибка указывала
на вызов в тесте, а не на код внутри функции:
package main
import (
"testing"
)
func assertEven(t *testing.T, num int) {
t.Helper()
if num%2 != 0 {
t.Errorf("number %d is not even", num)
}
}
func TestEvenNumbers(t *testing.T) {
assertEven(t, 4)
assertEven(t, 7)
}
Результат выполнения теста:
--- FAIL: TestEvenNumbers (0.00s)
main_test.go:14: number 7 is not even
Сообщение об ошибке указывает на строку 14, где вызывается
assertEven(t, 7), а не на строку внутри
assertEven. Без вызова t.Helper ошибка указывала
бы на строку с t.Errorf внутри вспомогательной функции.
Пример
Рассмотрим пример с несколькими вспомогательными функциями.
Здесь мы проверяем длину строки и используем t.Helper
для каждой из них:
package main
import (
"testing"
)
func assertLength(t *testing.T, str string, expected int) {
t.Helper()
if len(str) != expected {
t.Errorf("length of '%s' is %d, expected %d", str, len(str), expected)
}
}
func assertNotEmpty(t *testing.T, str string) {
t.Helper()
if len(str) == 0 {
t.Error("string is empty")
}
}
func TestStringLength(t *testing.T) {
assertLength(t, "abcde", 5)
assertNotEmpty(t, "abcde")
assertLength(t, "12345", 6)
assertNotEmpty(t, "12345")
}
Результат выполнения теста:
--- FAIL: TestStringLength (0.00s)
main_test.go:20: length of '12345' is 5, expected 6
Как видно, ошибка указывает на строку 20, где вызывается
assertLength(t, "12345", 6), что позволяет сразу увидеть
неверное ожидание в тесте, а не копаться во вспомогательной функции.
Смотрите также
-
метод
testing.T.Error,
который сообщает об ошибке в тесте без его остановки -
метод
testing.T.Fatal,
который завершает тест с ошибкой -
метод
testing.T.Log,
который выводит сообщение в лог теста -
метод
testing.T.Run,
который запускает подтест