如何测试包含log.Fatal()的Go函数
说,我有以下代码打印一些日志消息。我将如何测试已记录正确的消息?由于log.Fatal
通话os.Exit(1)
失败,测试失败。
package mainimport (
"log"
)
func hello() {
log.Print("Hello!")
}
func goodbye() {
log.Fatal("Goodbye!")
}
func init() {
log.SetFlags(0)
}
func main() {
hello()
goodbye()
}
以下是假设检验:
package mainimport (
"bytes"
"log"
"testing"
)
func TestHello(t *testing.T) {
var buf bytes.Buffer
log.SetOutput(&buf)
hello()
wantMsg := "Hello!\n"
msg := buf.String()
if msg != wantMsg {
t.Errorf("%#v, wanted %#v", msg, wantMsg)
}
}
func TestGoodby(t *testing.T) {
var buf bytes.Buffer
log.SetOutput(&buf)
goodbye()
wantMsg := "Goodbye!\n"
msg := buf.String()
if msg != wantMsg {
t.Errorf("%#v, wanted %#v", msg, wantMsg)
}
}
回答:
这类似于“ 如何os.Exit()
在Go中测试场景”:您需要实现自己的记录器,默认情况下,该记录器重定向到log.xxx()
,但在测试时为您提供了将函数替换为log.Fatalf()
您自己的记录器(不会调用os.Exit(1)
)的机会。
我在测试os.Exit()
电话中也做了同样的事情exit/exit.go
:
exiter = New(func(int) {})exiter.Exit(3)
So(exiter.Status(), ShouldEqual, 3)
(在这里,我的“退出”功能是一个空的,什么也不做)
以上是 如何测试包含log.Fatal()的Go函数 的全部内容, 来源链接: utcz.com/qa/417443.html