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上でカバレッジの確認が出来ます。
うん、便利。