首頁 >後端開發 >Golang >如何正確測試Go中的參數傳遞?

如何正確測試Go中的參數傳遞?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-15 06:48:14872瀏覽

How to Correctly Test Argument Passing in Go?

在 Golang中測試參數傳遞

考慮以下程式碼:

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
}

我們將參數傳遞給已編譯的使用以下指令編寫程式碼:

./args -user=bla

這將顯示以下內容輸出:

Your username is "bla"

測試方法

為了避免手動編譯和執行,我們的目標是寫一個測試來驗證參數傳遞。我們建立一個測試函數:

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

問題

當我們執行測試時,我們遇到了意想不到的結果:

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

參數「bla」未傳遞給函數,導致顯示「root」使用者名稱。

問題在於設定os.Args。 os.Args 中的第一個參數是可執行檔本身的路徑。為了解決這個問題,我們對其進行如下修改:

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

此外,最好保存原始 os.Args 狀態並在依賴正確參數的其他測試後恢復它。

以上是如何正確測試Go中的參數傳遞?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn