log.Fatal()이 포함된 Go 함수 테스트
log.Fatal()을 활용하여 인쇄하는 Go 함수가 있는 시나리오를 고려해보세요. 메시지. log.Fatal()이 os.Exit(1)을 트리거하여 테스트 실패를 유발하므로 이러한 기능을 테스트하는 것은 어려울 수 있습니다.
접근 방식:
이 문제를 극복하려면 다음을 수행하십시오. 출력을 표준 log.xxx() 대상으로 리디렉션하는 사용자 정의 로거를 구현하는 것이 좋습니다. 그러나 테스트 중에 log.Fatalf()와 같은 함수를 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) } }
참고:
이 접근 방식은 테스트 중에 특정 로거 기능을 교체하는 유연성을 부여하므로 원래 기능에 영향을 주지 않고 동작을 사용자 정의할 수 있습니다. 테스트 중입니다.
위 내용은 `log.Fatal()`을 사용하여 Go 기능을 효과적으로 테스트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!