为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Go(lang) 测试中捕获或抑制标准输出?

如何在 Go(lang) 测试中捕获或抑制标准输出?

Go
慕后森 2021-10-25 17:05:42
如何在 Go 测试中捕获或抑制标准输出?我正在尝试自学 go(lang) 测试。在下面的代码中,myshow.LoadPath 将大量信息打印到标准输出(这是正常的副作用)。然而,当我运行“go test”时,它确实会产生非常嘈杂的输出 有没有办法抑制或捕获标准输出?为了进行比较,我正在考虑 Python 世界中的类似问题。http://pytest.org/latest/capture.html#capturespackage slideshow_testimport (    "os"    "testing"    "github.com/golliher/go-hpf/slideshow")func setupTest() {    myshow := slideshow.Slideshow{Name: "This is my show"}    myshow.LoadPath("..")}func TestStub(t *testing.T) {    if true == false {        t.Fail()    }}func TestMain(m *testing.M) {    setupTest()    os.Exit(m.Run())}
查看完整描述

3 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

为了在测试期间抑制输出,我使用以下代码。我修复了输出和日志记录。测试完成后,它会重置输出流。


func TestStartStowWrongCommand(t *testing.T) {

 defer quiet()()   

 ...                      

}


func quiet() func() {

 null, _ := os.Open(os.DevNull)

 sout := os.Stdout

 serr := os.Stderr

 os.Stdout = null

 os.Stderr = null

 log.SetOutput(null)

 return func() {

  defer null.Close()

  os.Stdout = sout

  os.Stderr = serr

  log.SetOutput(os.Stderr)

 }

}


查看完整回答
反对 回复 2021-10-25
?
慕慕森

TA贡献1856条经验 获得超17个赞

可以 通过使用以下命令运行测试来抑制输出go test .

$ go help test

Go test 以两种不同的模式运行:在没有包参数的情况下调用时的本地目录模式(例如,'go test'),以及在使用包参数调用时的包列表模式(例如 'go test math', 'go test ./ ...”,甚至“去测试。”)。

在本地目录模式下, go test 编译并测试在当前目录中找到的包源,然后运行生成的测试二进制文件。在这种模式下,缓存(下面讨论)被禁用。包测试完成后, go test 会打印一个摘要行,显示测试状态('ok' 或 'FAIL')、包名称和经过的时间。

在包列表模式下, go test 编译并测试命令行上列出的每个包。如果包测试通过, go test 只打印最后的“ok”摘要行。如果包测试失败, go test 会打印完整的测试输出。如果使用 -bench 或 -v 标志调用,即使通过包测试,go test 也会打印完整输出,以显示请求的基准测试结果或详细日志记录。


查看完整回答
反对 回复 2021-10-25
  • 3 回答
  • 0 关注
  • 346 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信