登录
首页 >  Golang >  Go问答

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

来源:Golang技术栈

时间:2023-03-21 19:02:42 472浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《如何测试包含 log.Fatal() 的 Go 函数》,以下内容将会涉及到golang,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

说,我有以下代码打印一些日志消息。我将如何测试是否记录了正确的消息?由于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)
    }
}

正确答案

这类似于“如何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 函数》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>