Метод testing.T.Log
Метод T.Log записывает произвольное текстовое сообщение в лог теста.
Этот метод особенно полезен для отладки — он позволяет сохранять промежуточную информацию о ходе выполнения теста,
которая будет видна только в случае его падения или при подробном выводе (с флагом -v).
Первый и единственный параметр метода — это сообщение типа any (обычно передают строку),
которое необходимо записать в лог.
Синтаксис
t.Log(args ...any)
Метод принимает произвольное количество аргументов любого типа, аналогично fmt.Println.
Аргументы объединяются в одну строку с пробелами между ними.
Пример
Рассмотрим простой тест, который проверяет вычисление суммы двух чисел. Внутри теста добавим несколько логов для отслеживания процесса:
package main
import (
"fmt"
"testing"
)
func TestSum(t *testing.T) {
a := 5
b := 3
expected := 8
t.Log("Starting test with values:", a, b)
result := a + b
t.Log("Computed sum:", result)
if result != expected {
t.Errorf("Sum is incorrect: got %d, want %d", result, expected)
}
t.Log("Test completed successfully")
}
Результат выполнения теста с флагом -v:
"=== RUN TestSum"
" sum_test.go:11: Starting test with values: 5 3"
" sum_test.go:14: Computed sum: 8"
" sum_test.go:20: Test completed successfully"
"--- PASS: TestSum (0.00s)"
"PASS"
Обратите внимание: логи выводятся только при использовании флага -v.
Если запустить тест без него, сообщения не будут отображаться в консоли.
Пример
Продемонстрируем, как логи сохраняются при падении теста даже без флага -v.
Создадим тест, который всегда падает:
package main
import (
"testing"
)
func TestFailWithLogs(t *testing.T) {
t.Log("This message will be shown because test fails")
t.Logf("Current value: %d", 42)
t.Error("Test failed intentionally")
t.Log("This message will NOT be shown")
}
Результат выполнения теста без флага -v:
"--- FAIL: TestFailWithLogs (0.00s)"
" fail_test.go:8: This message will be shown because test fails"
" fail_test.go:9: Current value: 42"
" fail_test.go:10: Test failed intentionally"
"FAIL"
Как видно, все сообщения, записанные до вызова Error, были выведены в лог,
несмотря на отсутствие флага -v. Сообщение после Error не выводится,
так как выполнение теста прерывается.
Пример
Метод T.Log также поддерживает форматирование с использованием
аналогии с fmt.Print. Для форматированного вывода удобнее использовать
метод T.Logf, но в данном примере покажем простой вывод нескольких
значений в одном сообщении:
package main
import (
"fmt"
"testing"
)
func TestMultipleLogArgs(t *testing.T) {
name := "Alice"
age := 30
height := 1.75
t.Log("User info:", "Name:", name, "Age:", age, "Height:", height)
t.Log("String representation:", fmt.Sprintf("%s is %d years old", name, age))
if age < 18 {
t.Error("User is underage")
}
}
Результат выполнения теста с падением (или с флагом -v):
"=== RUN TestMultipleLogArgs"
" info_test.go:11: User info: Name: Alice Age: 30 Height: 1.75"
" info_test.go:12: String representation: Alice is 30 years old"
"--- PASS: TestMultipleLogArgs (0.00s)"
"PASS"
Метод автоматически разделяет аргументы пробелами, что делает его удобным для быстрого логирования без лишнего форматирования.
Смотрите также
-
метод
T.Logf,
который позволяет логировать сообщения с форматированием -
метод
T.Error,
который логирует сообщение об ошибке и продолжает выполнение теста -
метод
T.Fatal,
который логирует сообщение и немедленно прерывает выполнение теста -
метод
T.Helper,
который позволяет маркировать функцию как вспомогательную для более точного вывода ошибок