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 중국어 웹사이트의 기타 관련 기사를 참조하세요!