go - Go:在套件运行后打印文本?
问题描述
测试包会捕获所有输出并且不会打印它,除非测试失败或-v
打开了详细 ( )。有没有办法在套件完成后输出文本而无需打开详细信息?
例如:
func TestMain(m *testing.M) {
status := m.Run(m)
fmt.Println("important line to output")
os.Exit(status)
}
不会打印该行。
编辑:我发现fmt.Println
如果您从包 ( ) 内部运行测试,这将起作用go test
,但如果指定了一个或多个包 ( go test ./...
),除非-v
启用该选项。
解决方案
测试包捕获所有输出,除非测试失败或打开详细 (-v),否则不会打印它
是什么让你说标准输出被捕获?如果我将此代码保存到main_test.go
并运行go test
:
package main
import (
"fmt"
"os"
"testing"
)
func TestJoe(t *testing.T) {
fmt.Println("from joe")
}
func TestMain(m *testing.M) {
fmt.Println("before run")
s := m.Run()
fmt.Println("after run")
os.Exit(s)
}
我得到:
$ go test
before run
from joe
PASS
after run
关于使用./...
的输出,以下摘录自go help test
:
第二种称为包列表模式,发生在使用显式包参数调用 go test 时(例如“go test math”、“go test ./...”,甚至“go test.”)。在这种模式下, go test 编译和测试命令行中列出的每个包。如果包测试通过,go test 只打印最后的“ok”摘要行。如果包测试失败, go test 会打印完整的测试输出。如果使用 -bench 或 -v 标志调用,即使通过包测试, go test 也会打印完整输出,以显示请求的基准测试结果或详细日志记录。
推荐阅读
- r - 如何通过单击按钮将数据表行传递给机器学习模型?
- python - 如何在python中比较列表并返回匹配和不匹配?
- slack-api - Slack API 请求中无法识别分配的范围权限
- webpack - 窗口未在服务器端渲染 window.webpackJsonp 中定义
- mysql - 删除父行而不影响休眠中的子行
- java - 如何获得多个数组中的最大值?
- python - 如何规范化包含不相关条目的列表
- r - rename_if() 与 starts_with() 一起为某些列添加前缀
- selenium - 为什么 UI 测试位于测试金字塔的顶端?
- if-statement - XML 或 Javascript 中的 IF ELSE 条件