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
Patricia Arquetteasal
2024-12-09 06:27:06670semak imbas

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

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

Penyelesaian:

Isunya terletak pada penugasan os.Args. Sintaks hendaklah:

os.Args = []string{"cmd", "-user=bla"}

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

oldArgs := os.Args
defer func() { os.Args = oldArgs }()

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!

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