>백엔드 개발 >Golang >Go에서 os.Exit 시나리오를 테스트하는 방법은 무엇입니까?

Go에서 os.Exit 시나리오를 테스트하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-11 15:11:03553검색

How to Test os.Exit Scenarios in Go?

Go에서 os.Exit 시나리오 테스트

Go에서 os.Exit 함수는 현재 프로그램 실행을 종료하므로 테스트하기가 어렵습니다. 프로그램 종료와 관련된 시나리오. 이 문제를 해결하는 한 가지 접근 방식은 별도의 프로세스 및 하위 프로세스 검사를 활용하는 것입니다.

예:

다음 기능을 고려하세요.

func doomed() {
    os.Exit(1)
}

이 기능을 테스트하기 위해 별도의 테스트 사례를 만들고 별도의 프로세스에서 함수를 호출합니다.

테스트 사례:

import (
    "os"
    "os/exec"
    "testing"
)

func TestDoomed(t *testing.T) {
    if os.Getenv("BE_DOOMED") == "1" {
        doomed()
        return
    }

    cmd := exec.Command(os.Args[0], "-test.run=TestDoomed")
    cmd.Env = append(os.Environ(), "BE_DOOMED=1")
    err := cmd.Run()

    if e, ok := err.(*exec.ExitError); ok && !e.Success() {
        return
    }
    t.Fatalf("process ran with err %v, want exit status 1", err)
}

이 테스트 사례에서는:

  • BE_DOOMED 환경 변수가 "1"로 설정되어 있는지 확인하여 보조 프로세스 호출에 있음을 나타냅니다.
  • 설정된 경우 종료된 함수를 호출한 다음 반환합니다. , 보조 프로세스를 정상적으로 종료합니다.
  • 설정되지 않은 경우 exec.Command를 사용하여 보조 프로세스 호출을 시작하고 실행을 현재 테스트 함수(-test.run=TestDoomed)로 제한합니다.
  • BE_DOOMED 플래그를 보조 프로세스의 환경 변수로 전달합니다.
  • 보조 프로세스가 완료되면 exec.ExitError를 사용하여 종료 코드를 확인합니다. 프로세스가 오류로 종료되면 성공이 반환됩니다. 오류 없이 성공하면 실패합니다.

이 접근 방식을 사용하면 os.Exit 호출을 별도의 프로세스로 격리하여 다른 테스트에 영향을 주지 않도록 할 수 있습니다.

위 내용은 Go에서 os.Exit 시나리오를 테스트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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