Go에서 인수 전달 테스트
문제:
인수 확인을 위한 테스트를 작성할 때 os.Args를 사용하여 Go를 전달하면 예상 인수가 수신되지 않는 예상치 못한 동작이 발생합니다. function.
코드 조각:
package main import ( "flag" "fmt" "testing" "os" ) func passArguments() string { username := flag.String("user", "root", "Username for this server") flag.Parse() fmt.Printf("Your username is %q.", *username) usernameToString := *username return usernameToString } func TestArgs(t *testing.T) { expected := "bla" os.Args = []string{"-user=bla"} actual := passArguments() if actual != expected { t.Errorf("Test failed, expected: '%s', got: '%s'", expected, actual) } }
시도:
다음 테스트가 실패하여 인수가 다음과 같음을 나타냅니다. 통과되지 않음 올바르게:
--- FAIL: TestArgs (0.00s) args_test.go:15: Test failed, expected: 'bla', got: 'root' FAIL coverage: 87.5% of statements FAIL tool 0.008s
해결책:
문제는 os.Args 할당에 있습니다. 구문은 다음과 같아야 합니다.
os.Args = []string{"cmd", "-user=bla"}
또한 테스트 전에 os.Args의 원래 값을 유지하고 나중에 복원하는 것이 좋습니다.
oldArgs := os.Args defer func() { os.Args = oldArgs }()
이렇게 하면 다른 테스트가 실행되는 것을 방지할 수 있습니다. 수정으로 인해 영향을 받음 os.Args.
설명:
os.Args 슬라이스는 프로그램에 전달된 원래 인수를 포함하는 "전역 변수"입니다. os.Args에 새 조각을 할당함으로써 원래 인수를 효과적으로 대체합니다. os.Args의 첫 번째 요소는 일반적으로 실행 파일의 경로입니다. 인수 목록 앞에 "cmd"를 추가하면 함수가 올바른 인수 값을 수신하도록 할 수 있습니다.
테스트 후 os.Args의 원래 값을 복원하는 것은 다른 테스트에 대해 일관된 환경을 유지하는 좋은 방법입니다.
위 내용은 `os.Args`를 사용한 인수 전달에 대한 My Go 테스트가 실패하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!