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>
在此自訂類型實作中:
透過使用此自訂 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>
在此範例:
以上是如何在 Go 中對命令列標誌枚舉驗證進行單元測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!