강력한 소프트웨어 개발을 위해서는 다양한 테스트 시나리오를 다루는 것이 중요합니다. Go에서는 os.Exit를 호출하는 함수를 테스트하는 것이 독특한 과제를 제시합니다. 전체 테스트 모음을 방해하지 않고 어떻게 종료 시나리오를 테스트할 수 있습니까?
다음 함수를 고려해보세요.
func doomed() { os.Exit(1) }
이 함수를 호출하면 종료가 발생하는지 효과적으로 테스트하려면 os.Exit 호출을 테스트 내에서 제한하고 다른 테스트에 영향을 주지 않도록 하는 전략을 사용해야 합니다.
Go 팀의 핵심 멤버인 Andrew Gerrand는 그는 프레젠테이션에서 이 문제에 대한 독창적인 접근 방식을 제공합니다. 이 솔루션을 구현해 보겠습니다.
main.go(테스트할 기능이 있는 프로그램)
package main import ( "fmt" "os" ) func Crasher() { fmt.Println("Going down in flames!") os.Exit(1) }
main_test.go(Crasher 기능 테스트)
package main import ( "os" "os/exec" "testing" ) func TestCrasher(t *testing.T) { // Check if "BE_CRASHER" environment variable is set. if os.Getenv("BE_CRASHER") == "1" { Crasher() return } // Invoke the test again with "BE_CRASHER=1" to trigger the Crasher call. cmd := exec.Command(os.Args[0], "-test.run=TestCrasher") cmd.Env = append(os.Environ(), "BE_CRASHER=1") err := cmd.Run() // Validate exit code. if e, ok := err.(*exec.ExitError); ok && !e.Success() { return } t.Fatalf("process ran with err %v, want exit status 1", err) }
실행:
이 솔루션은 다음과 같이 작동합니다.
이 접근 방식을 사용하면 나머지 테스트 스위트.
위 내용은 테스트 스위트를 중단하지 않고 Go에서 'os.Exit' 시나리오를 테스트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!