Я запускаю тест в Go с оператором, чтобы что-то напечатать (например, для отладки тестов), но он ничего не печатает.
func TestPrintSomething(t *testing.T) {
fmt.Println("Say hi")
}
Когда я запускаю go test для этого файла, это результат:
ok command-line-arguments 0.004s
Насколько я знаю, единственный способ действительно заставить его распечатать - это распечатать его через t.Error (), например:
func TestPrintSomethingAgain(t *testing.T) {
t.Error("Say hi")
}
Что выводит это:
Say hi
--- FAIL: TestPrintSomethingAgain (0.00 seconds)
foo_test.go:35: Say hi
FAIL
FAIL command-line-arguments 0.003s
gom: exit status 1
Я погуглил и просмотрел руководство, но ничего не нашел.
Ответы:
В Структуры
testing.T
иtesting.B
оба имеют.Log
и.Logf
метод, звук будет то , что вы ищете..Log
и.Logf
аналогичныfmt.Print
иfmt.Printf
соответственно.Подробнее см. Здесь: http://golang.org/pkg/testing/#pkg-index
fmt.X
Операторы print действительно работают внутри тестов, но вы обнаружите, что их вывод, вероятно, не находится на экране, где вы ожидаете его найти, и, следовательно, почему вам следует использовать методы регистрации вtesting
.Если, как в вашем случае, вы хотите увидеть журналы для тестов, которые не удается, вы должны предоставить
go test
в-v
флаг (v для многословия). Более подробную информацию о флагах тестирования можно найти здесь: https://golang.org/cmd/go/#hdr-Testing_flagsисточник
Например,
источник
verbose
это то, что я искал.Да: так было до версии Go 1.13 (август 2019 г.) включительно.
За этим последовал
golang.org
выпуск 24929.Но для (возможно) Go 1.14 ( первый квартал 2020 г.): CL 127120
Теперь вывод:
Это действительно в Go 1.14, как утверждает Дэйв Чейни в «
go test -v
потоковом выводе »:Преимущество, по словам Дэйва:
источник
Для тестирования иногда делаю
Также вы можете печатать на:
источник
fmt.Println("hello")
.t.Log
иt.Logf
распечатайте в своем тесте, но его часто можно пропустить, поскольку он печатается в той же строке, что и ваш тест. Что я делаю, так это регистрирую их таким образом, чтобы они выделялись, т. Е.который выводит его на терминал как,
источник
*_test.go
Файл является источник Go , как и другие, вы можете инициализировать новую запись регистратора каждый раз , если вам нужно сбросить сложную структуру данных, здесь пример:Затем каждый раз, в каждом тесте:
источник