LoginSignup
2
1

More than 3 years have passed since last update.

[Scala]sbt-scoverage で一部ファイルを除外する

Last updated at Posted at 2019-08-19

sbt-scoverage、とても便利ですね。 plugin.sbt に記述するだけですぐにカバレッジ率を出してくれます。

plugin.sbt
addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.6.0")
// カバレッジ計測
sbt clean coverage test

// カバレッジレポート作成
sbt coverageReport

// 繋げてかく場合
sbt clean coverage test coverageReport

自分の環境だとこんな感じになっていました。

スクリーンショット 2019-08-19 19.14.26.png

controllers.javascript のカバレッジ率が0%になってますね。そりゃそうです、書いてないですから。

これのせいで合計のカバレッジ率が下がってるとなるとちょっと納得いきませんね。という事で除外してみたいと思います。

除外する

公式githubに、それっぽいものがありました。(https://github.com/scoverage/sbt-scoverage#Exclude%20classes%20and%20packages)

coverageExcludedPackages

正規表現でカバレッジ測定の対象から除外できます。 セミコロンで区切ります

build.sbt
coverageExcludedPackages := "<empty>;Reverse.*;.*AuthService.*;models\\.data\\..*"

これが使えそうですね。私のディレクトリ構成はこうなので

スクリーンショット 2019-08-19 18.48.05.png

こうでしょうか。

build.sbt
coverageExcludedPackages := ".*controllers.javascript.*"

import Changes してから実行

sbt coverageReport

スクリーンショット 2019-08-19 18.44.46.png

あれ・・・変わらないぞ :thinking:

試行錯誤

正規表現を見直してみる

そもそもの公式ドキュメントの例として書かれている正規表現、最初に謎の物体が入っています。

build.sbt
<empty>;

セミコロンは区切り文字なのでわかるのですが、 <empty> ってなんなんでしょうね。

オバフロでも <empty> をつけて試してみて! というコメントが付いている質問がありました。(http://danlec.com/st4k#questions/32331183)
とりあえず真似してみましょう。

coverageExcludedPackages := "<empty>;.*controllers.javascript.*"
sbt coverageReport

[info] Statement coverage.: 78.68%

お、カバレッジ率が上がった

スクリーンショット 2019-08-19 19.21.58.png

という事で、78%に上昇しました。これが本来の値ですね。

なんで <empty>; がいるのか結構調べたのですが、全くわかりませんでした。
他の人も「よくわかんないけど必要だよ」みたいに言っているので、深く考えない方がいいかもしれません。(https://stackoverflow.com/questions/47940361/scoverage-how-to-exclude-files-and-packages)

中のコードを追っていたのですが、結構しんどくて諦めました・・・

まとめ

  • テストカバレッジから除外したいケースがある場合、 coverageExcludedPackages を使う
  • 正規表現が通らない場合は、先頭に <empty>; をつけてみよう
2
1
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
1