ホームページ  >  記事  >  バックエンド開発  >  Go で os.Exit シナリオをテストするにはどうすればよいですか?

Go で os.Exit シナリオをテストするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-11 15:11:03508ブラウズ

How to Test os.Exit Scenarios in Go?

Go での os.Exit シナリオのテスト

Go では、os.Exit 関数が現在のプログラムの実行を終了するため、テストが困難になります。プログラムの終了を伴うシナリオ。この問題に対処する 1 つのアプローチは、個別のプロセスとサブプロセスのチェックを利用することです。

例:

次の関数を考えてみましょう:

func doomed() {
    os.Exit(1)
}

この関数をテストするには、別のテスト ケースを作成し、別のプロセスで関数を呼び出します。

テスト ケース:

import (
    "os"
    "os/exec"
    "testing"
)

func TestDoomed(t *testing.T) {
    if os.Getenv("BE_DOOMED") == "1" {
        doomed()
        return
    }

    cmd := exec.Command(os.Args[0], "-test.run=TestDoomed")
    cmd.Env = append(os.Environ(), "BE_DOOMED=1")
    err := cmd.Run()

    if e, ok := err.(*exec.ExitError); ok && !e.Success() {
        return
    }
    t.Fatalf("process ran with err %v, want exit status 1", err)
}

このテスト ケースの場合:

  • BE_DOOMED 環境変数が「1」に設定されているかどうかを確認します。これは、二次プロセス呼び出し中であることを示します。
  • 設定されている場合は、doomed 関数を呼び出して戻ります。 、セカンダリ プロセスを正常に終了します。
  • 設定されていない場合は、exec.Command を使用してセカンダリ プロセスの呼び出しを開始し、実行を現在のテスト関数 (-test.run=TestDoomed) に制限します。
  • セカンダリ プロセスの環境変数として BE_DOOMED フラグを渡します。
  • セカンダリ プロセスが完了したら、exec.ExitError を使用して終了コードを確認します。プロセスがエラーで終了した場合は成功が返されます。エラーなしで成功した場合は失敗。

このアプローチにより、os.Exit 呼び出しを別のプロセスに分離し、他のテストに影響を与えないようにすることができます。

以上がGo で os.Exit シナリオをテストするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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