>백엔드 개발 >Golang >`os.Args`를 사용한 인수 전달에 대한 My Go 테스트가 실패하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

`os.Args`를 사용한 인수 전달에 대한 My Go 테스트가 실패하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-09 06:27:06672검색

Why Does My Go Test for Argument Passing Using `os.Args` Fail, and How Can I Fix It?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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