Unit Menguji Bendera Baris Perintah dalam Go
Dalam Go, mentakrifkan bendera tersuai untuk aplikasi baris arahan memerlukan proses ujian yang teliti untuk memastikan mereka ketepatan. Satu senario khusus melibatkan pengesahan bahawa nilai bendera tertentu termasuk dalam penghitungan yang telah ditetapkan.
Kod untuk Ujian
<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>
Pendekatan Pengujian
Untuk menguji unit gelagat yang diingini, kami boleh memanfaatkan kuasa fungsi flag.Var, yang membolehkan kami menentukan jenis tersuai dan peraturan pengesahan untuk bendera.
<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>
Dalam pelaksanaan jenis tersuai ini :
Dengan menggunakan bendera Jenis format tersuai ini, proses ujian kini boleh mengesahkan kelakuan bendera apabila ditetapkan kepada pelbagai nilai.
Contoh Ujian
<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>
Dalam contoh ini:
Atas ialah kandungan terperinci Bagaimana untuk Pengesahan Penghitungan Bendera Baris Perintah Ujian Unit dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!