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
Lepaskan: 2024-12-08 17:52:10
asal
419 orang telah melayarinya

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
}
Salin selepas log masuk

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)
    }
}
Salin selepas log masuk

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
Salin selepas log masuk

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

// ...
Salin selepas log masuk

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!

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