【发布时间】:2014-11-07 15:33:28
【问题描述】:
我想测试一个简单的函数:
func (t *Thing) print(min_verbosity int, message string) {
if t.verbosity >= minv {
fmt.Print(message)
}
}
但是我怎样才能测试函数实际发送到标准输出的内容呢? Test::Output 在 Perl 中做我想做的事。我知道我可以编写自己的所有样板在 Go 中做同样的事情(如 here 所述):
orig = os.Stdout
r,w,_ = os.Pipe()
thing.print("Some message")
var buf bytes.Buffer
io.Copy(&buf, r)
w.Close()
os.Stdout = orig
if(buf.String() != "Some message") {
t.Error("Failure!")
}
但是对于每一个测试来说,这都是很多额外的工作。我希望有一种更标准的方法,或者可能是一个抽象库来处理这个问题。
【问题讨论】: