首頁  >  文章  >  後端開發  >  如何在 Go 中對自訂命令列標誌驗證進行單元測試?

如何在 Go 中對自訂命令列標誌驗證進行單元測試?

Patricia Arquette
Patricia Arquette原創
2024-11-05 06:52:02365瀏覽

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

在Go 單元測試中驗證命令列標誌

考慮以下使用命令列標誌來設定格式類型的程式碼:

<code class="go">// ... elided for brevity ...</code>

為了確保-format 標誌設定為預期值,可以編寫單元測試。 flag.Var 函數可用於自訂標誌的處理,從而允許對標誌值進行驗證和更多控制。

自訂標誌處理是透過實作Value 介面來實現的:

<code class="go">type formatType string

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

func (f *formatType) Set(value string) error {
    // Validation logic here
}</code>

將此套用於格式標誌:

<code class="go">var typeFlag formatType

func init() {
    // ... elided for brevity ...
    flag.Var(&typeFlag, "format", "Format type")
    flag.Var(&typeFlag, "f", "Format type (shorthand)")
}</code>

要對自訂標誌進行驗證進行單元測試,請考慮在flag_test.go 中找到以下方法:

<code class="go">func TestCustomFlag(t *testing.T) {
    // Setup test environment
    origArgs := os.Args

    // Define custom flag type
    type myFlag int
    flag.Var((*myFlag)(nil), "customflag", "Custom flag")

    tests := []struct {
        origArgs  []string
        expValue  int
        expOutput string
    }{
        // ... test cases ...
    }

    for _, test := range tests {
        os.Args = test.origArgs
        // Parse flags
        flag.Parse()
        // Check flag value
        if flagValue := flag.Lookup("customflag").Value.(myFlag); flagValue != test.expValue {
            t.Errorf("Expected %v, got %v", test.expValue, flagValue)
        }
        // Restore args
        os.Args = origArgs
    }
}</code>

總之,標誌.Var 函數允許自訂和驗證標誌值,可以按照既定模式進行單元測試。

以上是如何在 Go 中對自訂命令列標誌驗證進行單元測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn