首页 > 后端开发 > Golang > 正文

如何在 Go 测试中捕获和验证日志输出?

Mary-Kate Olsen
发布: 2024-11-16 16:48:03
原创
877 人浏览过

How to Capture and Verify Log Output in Go Tests?

在 Go 测试中访问日志

在 Go 测试中,验证函数的日志输出可能具有挑战性,尤其是当函数本身记录日志时

要捕获日志输出,常见的解决方案是在执行函数之前将默认日志输出重定向到缓冲区正在测试。

示例:

考虑以下 readByte 函数:

func readByte(/*...*/) {
    if err != nil {
        fmt.Println("ERROR")
        log.Print("Couldn't read first byte")
        return
    }
}
登录后复制

要测试日志输出,我们可以使用以下方法在测试文件中:

package main

import (
    "bytes"
    "testing"

    "github.com/stretchr/testify/assert"
)

func TestReadByte(t *testing.T) {
    var buf bytes.Buffer
    log.SetOutput(&buf)
    defer func() {
        log.SetOutput(os.Stderr)
    }()
    readByte()
    output := buf.String()
    assert.Contains(t, output, "Couldn't read first byte")
}
登录后复制

在此示例中,我们:

  • 创建一个缓冲区来捕获日志输出。
  • 使用 log.SetOutput(&buf) 将默认日志输出重定向到缓冲区。
  • 执行readByte 函数。
  • 使用 defer func() 恢复默认日志输出到 os.Stderr ,防止影响后续测试。
  • 使用 testify/assert 断言预期的日志消息。

以上是如何在 Go 测试中捕获和验证日志输出?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板