>  기사  >  백엔드 개발  >  Go에서 단위 테스트 명령줄 플래그 열거 유효성 검사를 수행하는 방법은 무엇입니까?

Go에서 단위 테스트 명령줄 플래그 열거 유효성 검사를 수행하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-17 10:57:02890검색

How to Unit Test Command Line Flag Enumeration Validation in Go?

Go의 명령줄 플래그 단위 테스트

Go에서 명령줄 애플리케이션에 대한 사용자 정의 플래그를 정의하려면 철저한 테스트 프로세스가 필요합니다. 단정. 특정 시나리오 중 하나는 특정 플래그의 값이 미리 정의된 열거형에 속하는지 확인하는 것입니다.

테스트할 코드

<code class="go">var formatType string

const (
    text = "text"
    json = "json"
    hash = "hash"
)

func init() {
    const (
        defaultFormat = "text"
        formatUsage   = "desired output format"
    )

    flag.StringVar(&formatType, "format", defaultFormat, formatUsage)
    flag.StringVar(&formatType, "f", defaultFormat, formatUsage+" (shorthand)")
}

func main() {
    flag.Parse()
}</code>

테스트 방법

원하는 동작을 단위 테스트하기 위해 플래그에 대한 사용자 정의 유형과 유효성 검사 규칙을 정의할 수 있는 flag.Var 함수의 기능을 활용할 수 있습니다.

<code class="go">type formatType string

func (f *formatType) String() string {
    return fmt.Sprint(*f)
}

func (f *formatType) Set(value string) error {
    if len(*f) > 0 && *f != "text" {
        return errors.New("format flag already set")
    }
    if value != "text" && value != "json" && value != "hash" {
        return errors.New("Invalid Format Type")
    }
    *f = formatType(value)
    return nil
}</code>

이 사용자 정의 유형 구현에서 :

  • String()은 플래그의 현재 값을 문자열 형식으로 반환합니다.
  • Set()는 플래그 값을 업데이트하고 허용된 열거형 내에 있는지 확인합니다.

이 사용자 정의 formatType 플래그를 사용하면 이제 테스트 프로세스에서 다양한 값으로 설정된 경우 플래그의 동작을 확인할 수 있습니다.

예제 테스트

<code class="go">package main

import "testing"

func TestFormatType(t *testing.T) {
    tests := []struct {
        args   []string
        expect string
    }{
        {[]string{"-format", "text"}, "text"},
        {[]string{"-f", "json"}, "json"},
        {[]string{"-format", "foo"}, "Invalid Format Type"},
    }

    for _, test := range tests {
        t.Run(test.args[0], func(t *testing.T) {
            flag.Parse()
            if typeFlag != test.expect {
                t.Errorf("Expected %s got %s", test.expect, typeFlag)
            }
        })
    }
}</code>

이 예에서:

  • TestFormatType은 테스트 목록을 반복합니다.
  • 각 테스트는 명령줄 인수를 설정하고 플래그를 구문 분석하며 결과 typeFlag 값을 예상 값과 비교합니다.
  • 테스트에 실패하면 오류가 보고됩니다.

위 내용은 Go에서 단위 테스트 명령줄 플래그 열거 유효성 검사를 수행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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