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

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

Mary-Kate Olsen
發布: 2024-12-15 06:48:14
原創
869 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板