Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menguji Penghuraian Hujah Pakej `flag` Go dengan Betul dalam Ujian Unit?

Bagaimana untuk Menguji Penghuraian Hujah Pakej `flag` Go dengan Betul dalam Ujian Unit?

Patricia Arquette
Lepaskan: 2024-12-18 10:26:11
asal
407 orang telah melayarinya

How to Properly Test Go's `flag` Package Argument Parsing in Unit Tests?

Cara Menguji Penghuraian Argumen dalam Go

Pertimbangkan kod Go berikut, yang menghuraikan argumen baris arahan menggunakan pakej bendera:

package main

import (
    "flag"
    "fmt"
)

func main() {
    passArguments()
}

func passArguments() string {
    username := flag.String("user", "root", "Username for this server")
    flag.Parse()
    fmt.Printf("Your username is %q.", *username)

    usernameToString := *username
    return usernameToString
}
Salin selepas log masuk

Untuk menguji fungsi ini, kita boleh menghantar hujah kepada kod yang disusun, seperti yang ditunjukkan di bawah:

./args -user=bla
Salin selepas log masuk

Ini sepatutnya menghasilkan output:

Your username is "bla"
Salin selepas log masuk

Walau bagaimanapun, jika kita cuba menguji tingkah laku ini dengan ujian berikut:

package main

import (
    "os"
    "testing"
)

func TestArgs(t *testing.T) {
    expected := "bla"
    os.Args = []string{"-user=bla"}

    actual := passArguments()

    if actual != expected {
        t.Errorf("Test failed, expected: '%s', got:  '%s'", expected, actual)
    }
}
Salin selepas log masuk

Kami menerima ralat:

FAIL
coverage: 87.5% of statements
FAIL    tool    0.008s
Salin selepas log masuk

Sebab kegagalan ini adalah kerana hanya menetapkan os.Args kepada kepingan baharu tidak memberikan hujah kepada fungsi. Untuk menyelesaikan masalah ini, kita perlu memastikan bahawa nilai pertama dalam os.Args ialah (laluan ke) boleh laku sendiri, seperti yang ditunjukkan dalam ujian yang disemak ini:

func TestArgs(t *testing.T) {
    expected := "bla"
    oldArgs := os.Args
    defer func() { os.Args = oldArgs }()
    os.Args = []string{"cmd", "-user=bla"}

    actual := passArguments()

    if actual != expected {
        t.Errorf("Test failed, expected: '%s', got:  '%s'", expected, actual)
    }
}
Salin selepas log masuk

Dengan menangguhkan pemulihan os.Args kepada keadaan asalnya, kami boleh memastikan bahawa ujian itu tidak mengganggu ujian lain yang mungkin meneliti hujah sebenar yang diluluskan semasa membangkitkan go ujian.

Atas ialah kandungan terperinci Bagaimana untuk Menguji Penghuraian Hujah Pakej `flag` Go dengan Betul dalam Ujian Unit?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan