>백엔드 개발 >Golang >Go에서 인수 전달을 올바르게 테스트하는 방법은 무엇입니까?

Go에서 인수 전달을 올바르게 테스트하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-15 06:48:14874검색

How to Correctly Test Argument Passing in Go?

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

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