Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Pengesahan Penghitungan Bendera Baris Perintah Ujian Unit dalam Go?

Bagaimana untuk Pengesahan Penghitungan Bendera Baris Perintah Ujian Unit dalam Go?

Barbara Streisand
Barbara Streisandasal
2024-11-17 10:57:02948semak imbas

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

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 :

  • String() mengembalikan nilai semasa bendera dalam bentuk rentetan.
  • Set() mengemas kini nilai bendera dan memastikan ia berada dalam penghitungan yang dibenarkan.

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:

  • TestFormatType berulang pada senarai ujian.
  • Setiap ujian menyediakan hujah baris perintah, menghuraikan bendera dan membandingkan nilai typeFlag yang terhasil dengan jangkaan keputusan.
  • Jika mana-mana ujian gagal, ia melaporkan ralat.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn