gpt4 book ai didi

testing - 如何测试包含 log.Fatal() 的 Go 函数

转载 作者:IT老高 更新时间:2023-10-28 13:04:14 34 4
gpt4 key购买 nike

说,我有以下代码打印一些日志消息。我将如何测试是否记录了正确的消息?当 log.Fatal 调用 os.Exit(1) 测试失败。

package main

import (
"log"
)

func hello() {
log.Print("Hello!")
}

func goodbye() {
log.Fatal("Goodbye!")
}

func init() {
log.SetFlags(0)
}

func main() {
hello()
goodbye()
}

以下是假设测试:

package main

import (
"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)
}
}

最佳答案

这类似于“How to test os.Exit() scenarios in Go”:您需要实现自己的记录器,默认情况下重定向到 log.xxx(),但在测试时给您机会替换log.Fatalf() 之类的函数和你自己的(不调用 os.Exit(1))

我对 exit/exit.go 中的 os.Exit() 调用做了同样的测试:

exiter = New(func(int) {})
exiter.Exit(3)
So(exiter.Status(), ShouldEqual, 3)

(这里,我的“退出”函数是一个空函数,什么都不做)

关于testing - 如何测试包含 log.Fatal() 的 Go 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30688554/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com