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
Patricia Arquetteasal
2024-12-18 10:26:11452semak imbas

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
}

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

./args -user=bla

Ini sepatutnya menghasilkan output:

Your username is "bla"

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)
    }
}

Kami menerima ralat:

FAIL
coverage: 87.5% of statements
FAIL    tool    0.008s

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)
    }
}

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!

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