在 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中文网其他相关文章!