您如何使用“测试”包在 Go 测试中打印?

新手上路,请多包涵

我在 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

我用谷歌搜索并查看了手册,但没有找到任何东西。

原文由 platwp 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 816
2 个回答

The structs testing.T and testing.B both have a .Log and .Logf method that sound to be what you are looking for. .Log.Logf 类似于 fmt.Printfmt.Printf

在此处查看更多详细信息:http: //golang.org/pkg/testing/#pkg-index

fmt.X 打印语句在测试 起作用,但你会发现它们的输出可能不在你期望找到它的屏幕上,因此,为什么你应该使用 testing .

如果像您的情况一样,您想查看未失败的测试日志,则必须提供 go test -v 标志(v 表示冗长)。可以在此处找到有关测试标志的更多详细信息: https ://golang.org/cmd/go/#hdr-Testing_flags

原文由 voidlogic 发布,翻译遵循 CC BY-SA 4.0 许可协议

例如,

 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
Verbose output: log all tests as they are run. Also print all
text from Log and Logf calls even if the test succeeds.


封装测试

函数 (*T) 日志

func (c *T) Log(args ...interface{})

Log 使用默认格式格式化其参数,类似于 Println,并将文本记录在错误日志中。对于测试,仅当测试失败或设置了 -test.v 标志时才会打印文本。对于基准测试,始终打印文本以避免性能取决于 -test.v 标志的值。

原文由 peterSO 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题