我在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
我用谷歌搜索过手册,但什么也没找到。
t.Log和t.Logf会在您的测试中打印出来,但由于它与您的测试打印在同一行上,因此经常会被遗漏。我所做的是记录他们的方式,使他们脱颖而出,即
t.Run("FindIntercomUserAndReturnID should find an intercom user", func(t *testing.T) {
id, err := ic.FindIntercomUserAndReturnID("test3@test.com")
assert.Nil(t, err)
assert.NotNil(t, id)
t.Logf("\n\nid: %v\n\n", *id)
})
把它打印到终端,
=== RUN TestIntercom
=== RUN TestIntercom/FindIntercomUserAndReturnID_should_find_an_intercom_user
TestIntercom/FindIntercomUserAndReturnID_should_find_an_intercom_user: intercom_test.go:34:
id: 5ea8caed05a4862c0d712008
--- PASS: TestIntercom (1.45s)
--- PASS: TestIntercom/FindIntercomUserAndReturnID_should_find_an_intercom_user (1.45s)
PASS
ok github.com/RuNpiXelruN/third-party-delete-service 1.470s
例如,
package verbose
import (
"fmt"
"testing"
)
func TestPrintSomething(t *testing.T) {
fmt.Println("Say hi")
t.Log("Say bye")
}
go test -v
=== RUN TestPrintSomething
Say hi
--- PASS: TestPrintSomething (0.00 seconds)
v_test.go:10: Say bye
PASS
ok so/v 0.002s
命令去
测试标志的描述
- v
详细输出:在运行所有测试时记录它们。同时打印所有
即使测试成功,也会调用Log和Logf中的文本。
包测试
func (*T) Log
func (c *T) Log(参数…接口{})
Log使用默认格式(类似于Println)格式化其参数,并在错误日志中记录文本。对于测试,只有在测试失败或-test时才会打印文本。设置V标志。对于基准测试,文本总是打印出来,以避免性能依赖于-test的值。v标志。
警告:这里的答案不适用于同时测试多个包。
来自@VonC和@voidlogic的答案非常棒,但我想引起以下线程的注意,以防有人正在运行go test -v ./…: https://github.com/golang/go/issues/46959
问题在于与从多个包运行测试相关的实现细微差别/困难。
例如:执行go test -v -count=1 -run TestOnlyOneInstanceOfThisTestExists ./multiple/packages/exist/below/…仅在测试完成后打印日志。
但是,执行go test -v -count=1 -run TestOnlyOneInstanceOfThisTestExists ./this/path/points/to/one/package/only/…将按预期输出流。