【发布时间】:2015-02-22 22:21:08
【问题描述】:
我正在尝试测试一些打印 ANSI 转义码的函数。例如
// Print a line in a color
func PrintlnColor(color string, a ...interface{}) {
fmt.Print("\x1b[31m")
fmt.Print(a...)
fmt.Println("\x1b[0m")
}
我尝试使用Examples 来做,但他们似乎不喜欢转义码。
有什么方法可以测试写入标准输出的内容吗?
【问题讨论】:
-
测试标准输出的目的是什么?在将其写入标准输出之前验证您的函数是否产生了您想要的输出要容易得多。
-
问题是 stdout 是唯一的输出。该函数将返回
n int, err error,就像fmt.Println -
您可以将
os.Stdout替换为类似于返回io.MultiWriter的*os.File,但重构代码以使其可测试更容易。你不需要测试fmt.Println和os.Stdout,它们有自己的单元测试。 -
是的,写一个
FprintlnColor然后让PrintlnColor用Stdout调用它。它可以写信给bytes.Buffer进行测试。 -
好的,如果你添加它作为答案,我会接受它。
标签: testing go ansi-escape