emmaでカバレッジ出力
カバレッジツールのemmaを利用して
antで実行するJUnitのカバレッジを出力できないかな(hudson用)
ということで調べたら無事できたので書きます。
emmaには直接カバレッジを取得する「on the fly」モードと
計測したいクラスにコードを埋め込んで計測する「offline」モード
があるみたいですが、今回は「offline」モードで行います。
(そもそもant+junit+emmaだと「offline」モードでしかできない?)
実際記載するantはこんな感じ
<!-- emmaのパス定義 -->
<path id="emma.classpath">
<pathelement location="${emma.dir}/emma.jar" />
<pathelement location="${emma.dir}/emma_ant.jar" />
</path>
<!-- emmaタスク読み込み -->
<taskdef resource="emma_ant.properties" classpathref="emma.classpath" />
<!-- emma実行ターゲット -->
<target name="exec_emma">
<!-- まずはemmaコードを埋め込んだテストクラスを生成 -->
<emma enabled="true">
<instr metadatafile="${coverage.dir}/metadata.emma"
destdir="${coverage.class.dir}"
merge="true"
mode="fullcopy">
<instrpath>
<pathelement location="${class.dir}" />
</instrpath>
</instr>
</emma>
<!-- JUnitの実施 -->
<junit printsummary="yes" fork="true">
<jvmarg value="-Demma.coverage.out.file=${coverage.dir}/coverage.emma" />
<jvmarg value="-Demma.coverage.out.merge=true" />
<jvmarg value="-Demma.verbosity.level=quiet" />
<jvmarg value="-Dcoverage.enabled=true" />
<formatter type="xml" />
<classpath>
<pathelement location="${coverage.class.dir}/classes" />
<pathelement location="${test.class.dir}" />
<path refid="emma.classpath" />
</classpath>
<batchtest todir="${test.report.path}">
<fileset dir="${test.src.dir}">
<include name="**/*Test.java" />
<exclude name="**/TestAll.java" />
</fileset>
</batchtest>
</junit>
<!-- 計測結果のレポートを出力(とりあえずXMLとHTMLで出力) -->
<emma enabled="true">
<property name="report.html.out.encoding" value="UTF-8" />
<report>
<sourcepath>
<pathelement location="${src.dir}" />
</sourcepath>
<fileset dir="${coverage.dir}">
<include name="*.emma" />
</fileset>
<xml outfile="${coverage.dir}/coverage.xml" />
<html outfile="${coverage.dir}/coverage.html" />
</report>
</emma>
</target>
hudsonと連携したければ、
emmaプラグインをインストールして
出力されるxmlファイルを指定すれば
hudson上でカバレッジの確認が出来ます。
うん、便利。