Тип testing.T
Тип testing.T передается как параметр в каждую тестовую функцию,
начинающуюся с префикса Test. Он предоставляет методы для
управления выполнением теста: логирования сообщений, пропуска,
отметки о неудаче и завершения теста досрочно. Экземпляр
testing.T позволяет получать информацию о текущем тесте
и управлять его состоянием.
Синтаксис
Тестовая функция всегда должна иметь следующий синтаксис:
func TestName(t *testing.T) {
// тело теста
}
Пример
Давайте напишем простой тест, который проверяет, что результат функции равен ожидаемому значению:
package main
import (
"testing"
)
func TestSum(t *testing.T) {
res := 2 + 2
if res != 4 {
t.Errorf("Sum is incorrect: got %d, want %d", res, 4)
}
}
Метод Errorf
Метод Errorf логирует сообщение об ошибке, но продолжает
выполнение теста. Вызов этого метода отмечает тест как неудачный,
но не останавливает его выполнение.
package main
import (
"testing"
)
func TestDivide(t *testing.T) {
res := 10 / 2
if res != 4 {
t.Errorf("Divide is incorrect: got %d, want %d", res, 4)
}
}
Результат выполнения кода при ошибке:
"Divide is incorrect: got 5, want 4"
Метод Fatal
Метод Fatal завершает выполнение теста немедленно
и логирует сообщение. Используйте его, когда дальнейшее выполнение
теста невозможно из-за критической ошибки.
package main
import (
"testing"
)
func TestFatalExample(t *testing.T) {
res := 1 / 0 // ошибка в вычислениях
if res != 1 {
t.Fatal("test stopped due to critical error")
}
}
Результат выполнения кода:
"test stopped due to critical error"
Метод Log
Метод Log выводит сообщение в журнал теста, но не влияет
на его прохождение. Полезно для отладки и дополнительной информации
во время выполнения теста.
package main
import (
"testing"
)
func TestLogExample(t *testing.T) {
t.Log("Starting test")
res := 5 * 5
t.Log("Result is", res)
if res != 25 {
t.Error("Multiplication is incorrect")
}
}
Результат выполнения кода:
"Starting test"
"Result is 25"
Метод Skip
Метод Skip пропускает тест с указанным сообщением.
Используйте его, когда тест не должен выполняться при определенных
условиях (например, если не настроено окружение).
package main
import (
"testing"
)
func TestSkipExample(t *testing.T) {
if true {
t.Skip("Skipping test due to condition")
}
// код теста
}
Результат выполнения кода:
"Skipping test due to condition"
Метод Parallel
Метод Parallel сообщает тестовому раннеру, что данный тест
может выполняться параллельно с другими тестами. Он должен вызываться
внутри тестовой функции для разрешения параллельного выполнения.
package main
import (
"testing"
"time"
)
func TestParallelExample(t *testing.T) {
t.Parallel()
time.Sleep(100 * time.Millisecond)
// проверка
}
Смотрите также
-
метод
testing.T.Errorf,
который логирует ошибку, но продолжает выполнение теста -
метод
testing.T.Fatal,
который немедленно завершает выполнение теста при критической ошибке -
метод
testing.T.Logf,
который выводит отформатированное сообщение в журнал теста -
метод
testing.T.Skipf,
который пропускает тест с отформатированным сообщением