at backyard

Color my life with the chaos of trouble.

Goでos.Exit(1)の終了をテストする

最初に

Goはまだまだ詳しくなく、かつ下に書いたstack overflowの内容は2016年頃のものなので、もっと良い方法があるのかもしれない。
が、今回ググってみたところ、一番しっくり来た内容がこれだったので、これを採用した。

Goでos.Exit(1)の終了をテストした備忘録

今日学んだ備忘録。といっても下記のstack overflowの一番上の回答を参考にしただけ。
(関係ないけどstack overflowの特定の回答のリンクってどうやって取得するんだっけ)

stackoverflow.com

詳細は上のリンクを読むのが早いのだけど、一応動きを調べたのでその内容だけメモ書き的に残しておく。

下記は実際にコマンドを実行した後の、実行結果に対するテスト処理。

    err := cmd.Run()
    if e, ok := err.(*exec.ExitError); ok && !e.Success() {
        return
    }

ここで実行エラーが err という変数に入る。
cmd.Run() 内の処理が成功している場合、err には nil が入るので、その後の変換処理 err.(*exec.ExitError) は失敗する。
そのためこのテスト自体も失敗となる。