Rumah >pembangunan bahagian belakang >Golang >Bagaimana Menguji Hantaran Hujah dalam Fungsi Golang dengan Berkesan?

Bagaimana Menguji Hantaran Hujah dalam Fungsi Golang dengan Berkesan?

Susan Sarandon
Susan Sarandonasal
2024-12-08 17:52:10403semak imbas

How to Effectively Test Argument Passing in Golang Functions?

Menguji Kelulusan Hujah di Golang

Di Golang, menghantar hujah kepada fungsi ialah cara biasa untuk memberikan input. Menguji ketepatan hantaran hujah adalah penting untuk memastikan kebolehpercayaan kod anda.

Cabarannya

Pertimbangkan coretan kod berikut:

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
}

Apabila menghantar argumen -user=bla kepada program ini, ia mencetak dengan betul "Nama pengguna anda ialah 'bla'." Cabarannya ialah untuk mencipta ujian yang mengesahkan tingkah laku ini tanpa perlu membina dan menjalankan kod secara manual setiap kali.

Percubaan

One might尝试使用 os.Args untuk menyediakan hujah dalam ujian:

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

Walau bagaimanapun, apabila menjalankan ujian ini, hasilnya ialah:

Your username is "root".
Your username is "root".
--- 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 ialah os.Args ialah pembolehubah global, jadi nilai awal ["args"] ditimpa oleh ujian, menjejaskan bahagian lain program. Untuk menyelesaikan masalah ini, kami boleh mengekalkan nilai asal dan memulihkannya selepas ujian:

oldArgs := os.Args
defer func() { os.Args = oldArgs }()
os.Args = []string{"cmd", "-user=bla"}

// ...

Atas ialah kandungan terperinci Bagaimana Menguji Hantaran Hujah dalam Fungsi Golang dengan Berkesan?. 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