前回の記事で、JMockitのカバレッジオプションについて書きましたが、オプションの設定方法を整理できておりませんでした。

今回カバレッジオプション月のコマンド実行方法と、Mavenのpom.xmlへの定義する方法をまとめます。

コマンドライン引数

いきなりpom.xmlにオプションを書いて挙動を見るのは非効率です。
オプション設定はmvn testコマンドで調整し、OKになったらpom.xmlに書き直しましょう。

mvn testコマンド実行時は-Dでオプションをつけます。
具体的には以下のようにしてください。

1mvn test -Djmockit-coverage-classes=net.atuweb.game.api.service*Service*

[ -D + jmockit- + オプション名 ]になっていますね。 これは問題ないと思います。

pom.xmlへの定義

オプション設定のため、pom.xmlにmaven-surefire-pluginを追加します。

argLine

起動オプションをargLineで設定する場合は、コマンドラインで実行した-Dオプションをそのまま転記することができます。

1<plugin>
2    <groupId>org.apache.maven.plugins</groupId>
3    <artifactId>maven-surefire-plugin</artifactId>
4    <configuration>
5        <argLine>-Djmockit-coverage-classes=net.atuweb.game.api.service*Service*</argLine>
6    </configuration>
7</plugin>

systemPropertyVariables

jmockit の公式に、systemPropertyVariablesによる設定方法が掲載されておりますので、そのまま引用します。

 1<plugin>
 2<groupId>org.apache.maven.plugins</groupId>
 3   <artifactId>maven-surefire-plugin</artifactId>
 4   <configuration>
 5      <systemPropertyVariables>
 6         <!-- At least one of the following needs to be set: -->
 7         <coverage-output>html</coverage-output>     <!-- or: html-nocp, serial, serial-append -->
 8         <coverage-metrics>all</coverage-metrics>    <!-- or: line, path, data -->
 9         <coverage-classes>loaded</coverage-classes> <!-- or a "*" expression for class names -->
10
11         <!-- Other properties, if needed: -->
12         <coverage-outputDir>my-dir</coverage-outputDir>       <!-- default: target/coverage-report -->
13         <coverage-srcDirs>sources</coverage-srcDirs>          <!-- default: all "src" directories -->
14         <coverage-excludes>some.package.*</coverage-excludes> <!-- default: empty -->
15         <coverage-check>80</coverage-check>                   <!-- default: no checks -->
16      </systemPropertyVariables>
17   </configuration>
18</plugin>

引用元 http:// jmockit.org/tutorial/CodeCoverage.html 現在はページ削除

プラグインの記述場所

<build><plugins>以下に定義します。
個別に設定も可能であり、その場合は<profile>の下のbuildに追加してください。

環境別にオプションを切り替える

stack overflowでうまい解決方法が紹介されておりました。
こちらはargLineを使う想定ですね。

Excluding multiple packages from code coverage JMockit
http://stackoverflow.com/questions/19960518/excluding-multiple-packages-from-code-coverage-jmockit

1.maven-surefire-pluginにカバレッジオプションの変数を埋め込んでおき

1<plugin>
2<groupId>org.apache.maven.plugins</groupId>
3<artifactId>maven-surefire-plugin</artifactId>
4<version>2.16</version>
5<configuration>
6    <argLine>-XX:MaxPermSize=256m -XX:-UseSplitVerifier ${jmockit-coverage-options}</argLine>
7</configuration>
8</plugin>

2.profileでその変数を定義する

 1<profiles>
 2    <profile>
 3        <id>os-windows</id>
 4        <activation>
 5            <os>
 6                <family>windows</family>
 7            </os>
 8        </activation>
 9        <properties>
10            <!-- See: http://code.google.com/p/jmockit/issues/detail?id=322 -->
11            <!-- See: http://code.google.com/p/jmockit/issues/detail?id=323 -->
12            <jmockit-coverage-options>-Djmockit-coverage-outputDir=target/coverage-report -Djmockit-coverage-classes=PackageC\..+ -Djmockit-coverage-excludes=packageA\..+^|packageB\..+^|com\.mydomain\..+</jmockit-coverage-options>
13        </properties>
14    </profile>
15
16    <profile>
17        <id>os-unix</id>
18        <activation>
19            <os>
20                <family>unix</family>
21            </os>
22        </activation>
23        <properties>
24            <!-- See: http://code.google.com/p/jmockit/issues/detail?id=322 -->
25            <jmockit-coverage-options>-Djmockit-coverage-outputDir=target/coverage-report -Djmockit-coverage-classes=PackageC\..+ -Djmockit-coverage-excludes=packageA\..+|packageB\..+|com\.mydomain\..+</jmockit-coverage-options>
26        </properties>
27    </profile>
28    :

おわりに

過去のプロジェクトでは「プロジェクトのルートディレクトリにcoverage-reportが生成」されていました。
それが現プロジェクトでは「target/coverage-report」に変わっており、「あれっ?」と思ったのが、オプションについて調べなおすきっかけでした。

cleanしたときにカバレッジもきれいになりますので、「target/coverage-report」のほうが良いですね。

参考

stack overflow - Excluding multiple packages from code coverage JMockit
http://stackoverflow.com/questions/19960518/excluding-multiple-packages-from-code-coverage-jmockit

株式会社ジェネシス 技術開発事業部blog - 【追加】最強モックツール JMockit その12 カバレッジオプション
http:// genesis-tdsg.blogspot.jp/2014/04/jmockit.html
現在は削除


[改訂新版]Spring入門 ――Javaフレームワーク・より良い設計とアーキテクチャ

長谷川 裕一,大野 渉,土岐 孝平
出版社:技術評論社  発売日:2016-06-14

Amazonで詳細を見る

この記事の著者 Webrow (うぇぶろう)
Web アプリ開発、 Web 顧問 エンジニア、WordPress サポートいたします。