ホームページ > バックエンド開発 > 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」になります。 username.

解決策

問題は os.Args の設定にあります。 os.Args の最初の引数は、実行可能ファイル自体へのパスです。これを修正するには、次のように変更します。

os.Args = []string{"cmd", "-user=bla"}
ログイン後にコピー

さらに、正しい引数に依存する他のテストでは、元の os.Args 状態を保存し、テスト後にそれを復元することをお勧めします。

以上がGo で引数の受け渡しを正しくテストするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート