Go1.14 的这个改进让 Gopher 生活更美好
Go1.14 的 go test -v 支持流式输出
testing 包是 Go 标准库中我最喜欢的程序包之一 , 不仅是它具有低干扰的单元测试方法 , 而且在 Go 的整个生命周期中 , 它可以改善、提高生活质量 ^_^ 。
在 Go1.14 中 , go test -v 将使 t.Log 的输出变成流式 , 而不是在测试运行结束之前进行存储 , 最后一起输出 。 看一个例子:
package mainimport ("fmt""testing""time")func TestLogStreaming(t *testing.T) {for i := 0; i < 5; i++ {time.Sleep(300 * time.Millisecond)fmt.Println("fmt.Println:", i)t.Log("t.Log:", i)}}
注意:在测试内部调用 fmt.Println通 常被认为是不该使用的 , 因为它绕过测试包的输出缓冲 , 而与 -v 标志无关 。 但是 , 在此示例中 , 有必要演示流式 t.Log 的变更 。
【Go1.14 的这个改进让 Gopher 生活更美好】% go1.13 test -v tlog_test.go=== RUNTestLogStreamingfmt.Println: 0fmt.Println: 1fmt.Println: 2fmt.Println: 3fmt.Println: 4--- PASS: TestLogStreaming (1.52s)tlog_test.go:13: t.Log: 0tlog_test.go:13: t.Log: 1tlog_test.go:13: t.Log: 2tlog_test.go:13: t.Log: 3tlog_test.go:13: t.Log: 4PASSokcommand-line-arguments1.971s
在 Go 1.13 和更早版本下 , fmt.Println 会立即输出 。 t.Log 会被缓冲并在测试完成后打印 。
% go1.14 test -v tlog_test.go=== RUNTestLogStreamingfmt.Println: 0TestLogStreaming: tlog_test.go:13: t.Log: 0fmt.Println: 1TestLogStreaming: tlog_test.go:13: t.Log: 1fmt.Println: 2TestLogStreaming: tlog_test.go:13: t.Log: 2fmt.Println: 3TestLogStreaming: tlog_test.go:13: t.Log: 3fmt.Println: 4TestLogStreaming: tlog_test.go:13: t.Log: 4--- PASS: TestLogStreaming (1.51s)PASSokcommand-line-arguments1.809s
在 Go 1.14 下 , fmt.Println 和 t.Log 是交错的 , 而不是等待测试完成 , 这表明使用 go test -v 时测试输出是流式的 。
对于集成类测试 , 这可以提高生活质量 , 当测试失败时 , 集成类测试通常会长时间重试 。 流式 t.Log 输出将帮助 Gophers 调试那些测试失败 , 而不必等到整个测试超时才能看到它们的输出 。
原文作者:Dave Cheney
原文链接:
编译:polaris
文章插图
图片来自:pexels
喜欢本文的朋友 , 欢迎关注“Go语言中文网”:
文章插图
Go语言中文网启用微信学习交流群 , 欢迎加微信:274768166 , 投稿亦欢迎
- 智能手机市场|华为再拿第一!27%的份额领跑全行业,苹果8%排在第四名!
- 会员|美容院使用会员管理软件给顾客更好的消费体验!
- 行业|现在行业内客服托管费用是怎么算的
- 人民币|天猫国际新增“服务大类”,知舟集团提醒入驻这些类目的要注意
- 国外|坐拥77件专利,打破国外的垄断,造出中国最先进的家电芯片
- 长安|长安傍上华为这个大腿,市值暴涨500亿!可见华为影响力之大?
- 技术|做“视频”绿厂是专业的,这项技术获人民日报评论点赞
- 面临|“熟悉的陌生人”不该被边缘化
- 中国|浅谈5G移动通信技术的前世和今生
- 手机|这个超强App,让手机快3倍,流畅到起飞