2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Golang】指定したカバレッジ率以下で失敗させる(ステータス1で終了させる) go test -cover 時のパーセンテージ指定

Last updated at Posted at 2020-10-17

Go 言語でカバレッジの合格ラインを指定したい

go test -coverカバレッジ率が低くてもステータス 0(ゼロ)で正常終了してしまう。

$ # カバレッジ付きでユニットテストを実行する
$ go test -cover ./src
ok      github.com/KEINOS/sample/src       coverage: 62.5% of statements

$ # ステータス 0 で正常終了してしまう
$ echo $?
0

n パーセント以下は失敗」もしくは「n% より高い場合にパスさせる」といった、指定したパーセンテージよりカバレッジが低い場合にステータス 1 で終了させたい

Golang に標準装備されているユニット・テストで、カバレッジを表示させる際に、カバー率が低い場合に失敗させたかったのです。Travis CI や GitHub Actions などの CI とか。

「go test cover カバレッジ パーセンテージ 指定」とググってもカバレッジの説明ばかりで、カバレッジの合格ラインの指定方法について分からなかったので、自分のググラビリティとして。

TL; DR (今北産業)

  1. go test-cover は合格ラインを指定するオプションを持っていません。(Go v1.15.2 現在)
  2. cover モードが有効時 testing. Coverage() でカバー率を取得できます
  3. TestMain() に条件文を組み込むことでパーセンテージを指定することができます。

TS; DR

メインのテストに以下を指定
package (
    "fmt"
    "testing"
)

// カバー率(0.8 以上で合格)
var thresholdCoverage = 0.8

func TestMain(m *testing.M) {
    var returnCode = m.Run()
    if returnCode == 0 && testing.CoverMode() != "" {
        var rateCoverage = testing.Coverage()
        if rateCoverage < thresholdCoverage {
            fmt.Println("テストはパスしましたが。カバレッジに失敗しました。カバレッジ率:", rateCoverage)
            returnCode = -1
        }
    }
    os.Exit(returnCode)
}
  • 動作確認: Go v1.15.2 @ Alpine Linux v3.12
  • 参考文献: 回答 | "fail unit tests if coverage is below certain percentage" @ StackOverflow

参考文献

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?