この記事は公開されてから1年以上経過しているため、情報が古い可能性がございます。
ご注意ください。

このWordPress pluginを配布しています

アウェイクさんのバスアロマがたまらなく好きなtomita@atuwebです。

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

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

コマンドライン引数

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

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

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

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

pom.xmlへの定義

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

argLine

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

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <argLine>-Djmockit-coverage-classes=net.atuweb.game.api.service*Service*</argLine>
    </configuration>
</plugin>

systemPropertyVariables

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

<plugin>
<groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <configuration>
      <systemPropertyVariables>
         <!-- At least one of the following needs to be set: -->
         <coverage-output>html</coverage-output>     <!-- or: html-nocp, serial, serial-append -->
         <coverage-metrics>all</coverage-metrics>    <!-- or: line, path, data -->
         <coverage-classes>loaded</coverage-classes> <!-- or a "*" expression for class names -->

         <!-- Other properties, if needed: -->
         <coverage-outputDir>my-dir</coverage-outputDir>       <!-- default: target/coverage-report -->
         <coverage-srcDirs>sources</coverage-srcDirs>          <!-- default: all "src" directories -->
         <coverage-excludes>some.package.*</coverage-excludes> <!-- default: empty -->
         <coverage-check>80</coverage-check>                   <!-- default: no checks -->
      </systemPropertyVariables>
   </configuration>
</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にカバレッジオプションの変数を埋め込んでおき

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.16</version>
<configuration>
    <argLine>-XX:MaxPermSize=256m -XX:-UseSplitVerifier ${jmockit-coverage-options}</argLine>
</configuration>
</plugin>

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

<profiles>
    <profile>
        <id>os-windows</id>
        <activation>
            <os>
                <family>windows</family>
            </os>
        </activation>
        <properties>
            <!-- See: http://code.google.com/p/jmockit/issues/detail?id=322 -->
            <!-- See: http://code.google.com/p/jmockit/issues/detail?id=323 -->
            <jmockit-coverage-options>-Djmockit-coverage-outputDir=target/coverage-report -Djmockit-coverage-classes=PackageC\..+ -Djmockit-coverage-excludes=packageA\..+^|packageB\..+^|com\.mydomain\..+</jmockit-coverage-options>
        </properties>
    </profile>

    <profile>
        <id>os-unix</id>
        <activation>
            <os>
                <family>unix</family>
            </os>
        </activation>
        <properties>
            <!-- See: http://code.google.com/p/jmockit/issues/detail?id=322 -->
            <jmockit-coverage-options>-Djmockit-coverage-outputDir=target/coverage-report -Djmockit-coverage-classes=PackageC\..+ -Djmockit-coverage-excludes=packageA\..+|packageB\..+|com\.mydomain\..+</jmockit-coverage-options>
        </properties>
    </profile>
    :

おわりに

過去のプロジェクトでは「プロジェクトのルートディレクトリに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



Maven: The Definitive Guide
Kindle

スポンサーリンク
ad_336
ad_336
  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存