ホームページ >バックエンド開発 >Golang >Golang で引数の受け渡しを正しくテストするにはどうすればよいですか?

Golang で引数の受け渡しを正しくテストするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-07 17:34:13850ブラウズ

How to Correctly Test Argument Passing in Golang?

Golang での引数の受け渡しのテスト

Golang では、フラグを使用して関数に引数を渡すことができます。引数の受け渡しをテストするには、コマンドライン引数の受け渡しをシミュレートするテストを作成できます。

問題

次のテストを実行するとき:

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

テストは失敗し、予想される結果 (「bla」) が実際の結果と一致しないことを示すエラー メッセージが表示されます("root").

解決策

この問題は、os.Args の最初の値が実行可能ファイル自体へのパスであるために発生します。これを修正するには、実行可能ファイルと引数の両方を含むように os.Args スライスを更新する必要があります。

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

さらに、os.Args はグローバル変数であるため、元の状態を保存して、他のテストとの干渉を防ぐために、テスト後に復元します:

oldArgs := os.Args
defer func() { os.Args = oldArgs }()

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。