>  기사  >  백엔드 개발  >  함수를 수정하지 않고 Go 테스트에서 기록된 출력을 테스트하는 방법은 무엇입니까?

함수를 수정하지 않고 Go 테스트에서 기록된 출력을 테스트하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-11 07:28:03197검색

How to Test Logged Output in Go Tests Without Modifying the Function?

Go 테스트에서 기록된 출력 테스트

Go에서 단위 테스트에는 테스트된 함수에 의해 생성된 출력 또는 로그를 확인하는 작업이 포함되는 경우가 많습니다. 특정 시나리오에서 오류를 기록하는 함수가 있다고 가정해 보겠습니다.

문제:

오류 메시지를 기록하는 다음 함수 readByte가 있습니다.

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

함수를 수정하지 않고 go 테스트를 사용하여 readByte의 출력 오류를 테스트하는 방법은 무엇입니까?

해결책:

로그 출력을 캡처하려면 테스트 중에 로그 패키지의 출력을 임시 버퍼로 리디렉션한 다음 내용을 어설션할 수 있습니다. 버퍼의

예제 코드:

readbyte_test.go 파일:

package main

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

func readByte( /*...*/ ) {
    // ...
    err := io.EOF // Force an error
    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.Logf("Output: %s", buf.String())
}

출력 예:

$ go test -v readbyte_test.go
=== RUN   TestReadByte
--- PASS: TestReadByte (0.00s)
        readbyte_test.go:30: Output: ERROR
        Couldn't read first byte
PASS
ok      command-line-arguments  0.004s
$ 

이 예에서 출력되는 오류 메시지는 이제 Go의 내장 기능을 사용하여 테스트하고 확인할 수 있습니다. 원래 readByte 기능을 변경하지 않고 테스트 도구에서.

위 내용은 함수를 수정하지 않고 Go 테스트에서 기록된 출력을 테스트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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