Help us understand the problem. What is going on with this article?

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

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>; をつけてみよう
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした