Golang에서 인수 전달 테스트
다음 코드를 고려하세요.
package main import ( "flag" "fmt" ) func main() { passArguments() } 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 }
컴파일된 코드에 인수를 전달합니다.
./args -user=bla
명령을 사용하여 코드를 작성하면 다음이 표시됩니다. 출력:
Your username is "bla"
테스트 방법
수동 컴파일 및 실행을 피하기 위해 인수 전달을 확인하는 테스트를 작성하는 것을 목표로 합니다. 테스트 함수를 만듭니다.
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) } }
문제
테스트를 실행할 때 예상치 못한 결과가 발생합니다.
Your username is "root".Your username is "root".--- FAIL: TestArgs (0.00s) args_test.go:15: Test failed, expected: 'bla', got: 'root' FAIL coverage: 87.5% of statements FAIL tool 0.008s
인수 "bla"가 함수에 전달되지 않아 "root"가 표시됩니다. username.
해결책
문제는 os.Args 설정에 있습니다. os.Args의 첫 번째 인수는 실행 파일 자체의 경로입니다. 이 문제를 해결하려면 다음과 같이 수정합니다.
os.Args = []string{"cmd", "-user=bla"}
또한 올바른 인수에 의존하는 다른 테스트를 위해 원래 os.Args 상태를 저장하고 테스트 후에 복원하는 것이 좋습니다.
위 내용은 Go에서 인수 전달을 올바르게 테스트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!