【发布时间】:2015-01-30 07:12:13
【问题描述】:
当终端/控制台测试运行实际以红色或绿色文本显示其输出时,我喜欢它。似乎很多可用于 Go 的测试库都有这个。但是,我只想使用 Go 附带的默认测试包。有没有办法用红色和绿色对其输出进行着色?
【问题讨论】:
当终端/控制台测试运行实际以红色或绿色文本显示其输出时,我喜欢它。似乎很多可用于 Go 的测试库都有这个。但是,我只想使用 Go 附带的默认测试包。有没有办法用红色和绿色对其输出进行着色?
【问题讨论】:
您可以使用通用着色器grc 为任何东西着色。
在 Debian/Ubuntu 上,使用 apt-get install grc 安装。在带有 brew install grc 的 Mac 上。
在你的主目录中创建一个配置目录:
mkdir ~/.grc
然后在 ~/.grc/grc.conf 中创建您的个人 grc 配置:
# Go
\bgo.* test\b
conf.gotest
然后在~/.grc/conf.gotest 中创建一个 Go 测试着色配置,例如:
regexp==== RUN .*
colour=blue
-
regexp=--- PASS: .*
colour=green
-
regexp=^PASS$
colour=green
-
regexp=^(ok|\?) .*
colour=magenta
-
regexp=--- FAIL: .*
colour=red
-
regexp=[^\s]+\.go(:\d+)?
colour=cyan
现在你可以运行 Go 测试了:
grc go test -v ./..
样本输出:
为避免一直键入 grc,请为您的 shell 添加一个别名(如果使用 Bash,则为 ~/.bashrc 或 ~/.bash_profile 或两者,具体取决于您的操作系统):
alias go=grc go
现在您只需运行即可获得着色:
go test -v ./..
【讨论】:
grcat 抛出ValueError: Invalid keyword。 grcat 需要密钥 colours 代替(请参阅 here)
colour 适用于 grc 1.11.1。
~/.grc/conf.gotest末尾需要一个空行,zsh和grc 1.11.1,否则它正在修剪“青色”的最后一个字符,正在寻找颜色“cya” "
[[ -s "/usr/local/etc/grc.zsh" ]] && source /usr/local/etc/grc.zsh
您可以为此创建一个包装外壳脚本并使用颜色转义序列对其进行着色。这是 Linux 上的一个简单示例(我不确定这在 Windows 上会是什么样子,但我想有办法.. :))
go test -v . | sed ''/PASS/s//$(printf "\033[32mPASS\033[0m")/'' | sed ''/FAIL/s//$(printf "\033[31mFAIL\033[0m")/''
【讨论】:
got
go test 的退出代码,这反过来意味着如果在某些 CI 环境中使用该命令,那么即使测试失败,构建也不会失败!使用 bash 的一种解决方案是使用 pipefail。
还有一个名为 richgo 的工具以用户友好的方式完成此任务。
【讨论】:
您仍然需要一个库来添加颜色转义代码,例如:
mattn/go-colorable 或 shiena/ansicolor
fatih/color 或 kortschak/ct
logrusorgru/aurora(Ivan Black 在 the comments 中提到)从那里,您可以指定要着色的内容(StdOut 或 StdErr,例如 in this example)
【讨论】:
kortschak/ct不支持Windows。
fmt.Printf("value %d", Red(3))
【讨论】:
BoltDB 有一些如下所示的测试方法:
func assert(tb testing.TB, condition bool, msg string, v ...interface{}) {
if !condition {
_, file, line, _ := runtime.Caller(1)
fmt.Printf("\033[31m%s:%d: "+msg+"\033[39m\n\n", append([]interface{}{filepath.Base(file), line}, v...)...)
tb.FailNow()
}
}
Here are the rest。我添加了绿点here。
【讨论】:
您可以像其他人在他们的答案中提到的那样为文本使用颜色,以获得带有颜色代码或使用第三方库的彩色文本。
但您可以改用表情符号!例如,您可以将⚠️ 用于警告消息,将? 用于错误消息。
或者简单地将这些笔记本用作颜色:
?: error message
?: warning message
?: ok status message
?: action message
?: canceled status message
?: Or anything you like and want to recognize immediately by color
此方法还可以帮助您直接在源代码中快速扫描和查找日志。
但是一些 Linux 默认 emoji 字体的发行版默认不是彩色的,你可能想先让它们彩色。
【讨论】: