>백엔드 개발 >Golang >Go 테스트에서 로그를 캡처하고 검사하는 방법은 무엇입니까?

Go 테스트에서 로그를 캡처하고 검사하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-21 02:18:11384검색

How to Capture and Inspect Logs in Go Tests?

Go 테스트에서 로그 캡처 및 검사

테스트 중인 함수에서 생성된 로그를 확인하려면 이를 캡처하고 검사하는 것이 필수적입니다. 이는 출력을 리디렉션하고 예상 값과 비교하여 달성할 수 있습니다.

제공된 예에서 readByte 함수는 로그 메시지를 표준 출력으로 인쇄합니다. 테스트에서 이러한 메시지를 캡처하려면 아래와 같이 bytes.Buffer를 활용할 수 있습니다.

package main

import (
    "bytes"
    "fmt"
    "io"
    "log"
    "os"
    "testing"
)

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

func TestReadByte(t *testing.T) {
    var buf bytes.Buffer
    log.SetOutput(&buf)
    defer func() {
        log.SetOutput(os.Stderr)
    }()
    readByte()
    t.Log(buf.String())
}

설명:

  • log.SetOutput( &buf) 라인은 로그 출력을 buf 변수로 리디렉션합니다.
  • defer log.SetOutput(os.Stderr)은 테스트 실행 후 로그 출력이 원래 대상으로 복원되도록 보장합니다.
  • t.Log(buf.String()) 줄은 캡처된 로그를 테스트 로그에 인쇄합니다. .

buf의 내용을 검토하면 예상한 로그가 readByte 함수에 의해 생성되었는지 확인할 수 있습니다. 이 접근 방식을 사용하면 테스트 중인 함수의 코드를 수정하지 않고도 로그 출력을 테스트할 수 있습니다.

위 내용은 Go 테스트에서 로그를 캡처하고 검사하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.