Rumah > pembangunan bahagian belakang > Golang > Mengapa My Go Test untuk Lulus Hujah Menggunakan `os.Args` Gagal, dan Bagaimana Saya Boleh Membetulkannya?

Mengapa My Go Test untuk Lulus Hujah Menggunakan `os.Args` Gagal, dan Bagaimana Saya Boleh Membetulkannya?

Patricia Arquette
Lepaskan: 2024-12-09 06:27:06
asal
669 orang telah melayarinya

Why Does My Go Test for Argument Passing Using `os.Args` Fail, and How Can I Fix It?

Menguji Argumen Lulus dalam Go

Masalah:

Apabila menulis ujian untuk mengesahkan hujah menghantar Go menggunakan os.Args, ia menghasilkan tingkah laku yang tidak dijangka di mana hujah yang dijangkakan tidak diterima oleh fungsi.

Snippet Kod:

package main

import (
    "flag"
    "fmt"
    "testing"

    "os"
)

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
}

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

Percubaan:

Ujian berikut gagal, menunjukkan bahawa hujah adalah tidak dilalui dengan betul:

--- FAIL: TestArgs (0.00s)
    args_test.go:15: Test failed, expected: 'bla', got:  'root'
FAIL
coverage: 87.5% of statements
FAIL    tool    0.008s
Salin selepas log masuk

Penyelesaian:

Isunya terletak pada penugasan os.Args. Sintaks hendaklah:

os.Args = []string{"cmd", "-user=bla"}
Salin selepas log masuk

Selain itu, disyorkan untuk mengekalkan nilai asal os.Args sebelum ujian dan memulihkannya selepas itu:

oldArgs := os.Args
defer func() { os.Args = oldArgs }()
Salin selepas log masuk

Ini menghalang ujian lain daripada menjadi dipengaruhi oleh pengubahsuaian os.Args.

Penjelasan:

Kepingan os.Args ialah "pembolehubah global" yang mengandungi argumen asal yang dihantar kepada atur cara. Dengan memberikan kepingan baharu kepada os.Args, kami menggantikan hujah asal dengan berkesan. Elemen pertama os.Args lazimnya ialah laluan ke boleh laku. Dengan menambahkan "cmd" pada senarai argumen, kami memastikan bahawa fungsi menerima nilai argumen yang betul.

Memulihkan nilai asal os.Args selepas ujian adalah amalan yang baik untuk mengekalkan persekitaran yang konsisten untuk ujian lain.

Atas ialah kandungan terperinci Mengapa My Go Test untuk Lulus Hujah Menggunakan `os.Args` Gagal, dan Bagaimana Saya Boleh Membetulkannya?. 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