Golang에서 인수 전달 테스트
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 }
이 프로그램에 -user=bla 인수를 전달하면 "사용자 이름은 'bla'입니다."가 올바르게 인쇄됩니다. 문제는 매번 코드를 수동으로 빌드하고 실행할 필요 없이 이 동작을 확인하는 테스트를 만드는 것입니다.
The Attempt
One might尝试使用 os.Args 테스트에서 인수를 제공하려면:
package main import ( "os" "testing" ) 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) } }
그러나 이 테스트를 실행할 때 결과는 is:
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
해결책
문제는 os.Args가 전역 변수이므로 ["args"]의 초기 값을 다음으로 덮어쓴다는 것입니다. 테스트는 프로그램의 다른 부분에 영향을 미칩니다. 이 문제를 해결하려면 원래 값을 보존하고 테스트 후에 복원할 수 있습니다.
oldArgs := os.Args defer func() { os.Args = oldArgs }() os.Args = []string{"cmd", "-user=bla"} // ...
위 내용은 Golang 함수에서 인수 전달을 효과적으로 테스트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!