SonarでJUnitのカバレッジを取得
注意 : このページ「SonarでJUnitのカバレッジを取得」は、現在書きかけの状態です。完成版に向けて、今後加筆・修正します。また、本ページの内容は全体的な整合性が取れていない可能性があります。 |
本ページは、SonarでJUnitのカバレッジを取得する手順を記述します。ビルドツールはAnt、カバレッジツールはCoberturaを使用しています。
Sonarの手順はAnt,Jenkins,Sonarの導入手順を参照してください。
環境
- OS : CentOS 5.5
- Jenkins : 1.409
- Sonar : 2.7
- Ant : 1.8.2
- JUnit : 4.8.2
- Cobertura : 1.9.4.1
導入手順
Sonar測定用Javaプロジェクトの用意
Sonar測定用Javaプロジェクトを作成し、Subversionリポジトリにコミットします。
JUnitのjarを取得
入手先 : http://www.junit.org/
「junit-4.8.2.jar」をJavaプロジェクトの「lib」ディレクトリに保存します。(「lib」ディレクトリは例なので適宜変更しても問題ありません)
hamcrestのjarを取得
入手先 : http://code.google.com/p/hamcrest/
JUnitの動作に必要なhamcrestを取得します。「hamcrest-core-1.3.0RC2.jar」をJavaプロジェクトの「lib」ディレクトリに保存します。
Cobertureのjarを取得
入手先 : http://cobertura.sourceforge.net/
「cobertura-1.9.4.1-bin.zip」をダウンロード後解凍し、「cobertura-1.9.4.1」ディレクトリをJavaプロジェクトの「「lib」ディレクトリに保存します。
build.xml作成
build.xmlファイルの例を以下に記述します。
<?xml version="1.0" encoding="UTF-8"?>
<project name="sample" default="compile" basedir="." xmlns:sonar="antlib:org.sonar.ant">
<description>Sonarサンプル</description>
<property environment="env" />
<property name="src" location="src"/>
<property name="build" location="bin"/>
<property name="dist" location="dist"/>
<property name="instrument" location="instrument"/>
<property name="report" location="report"/>
<property name="cobertura" location="lib/cobertura-1.9.4.1"/>
<taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
<classpath path="${env.ANT_HOME}/lib/sonar-ant-task-1.0.jar" />
</taskdef>
<path id="cobertura.classpath">
<fileset dir="${cobertura}">
<include name="cobertura.jar" />
<include name="lib/**/*.jar" />
</fileset>
</path>
<taskdef classpathref="cobertura.classpath" resource="tasks.properties" />
<target name="init">
<tstamp/>
<mkdir dir="${build}"/>
</target>
<target name="compile" depends="init" description="compile the source">
<javac srcdir="${src}" destdir="${build}" includeantruntime="false" encoding="UTF-8" debug="true">
<classpath>
<pathelement path="lib/junit-4.8.2.jar" />
</classpath>
</javac>
</target>
<target name="instrument">
<cobertura-instrument todir="${instrument}">
<fileset dir="${build}">
<include name="**/*.class" />
<exclude name="**/*Test.class" />
</fileset>
</cobertura-instrument>
</target>
<target name="test">
<mkdir dir="${report}"/>
<junit fork="yes" haltonfailure="false">
<formatter type="xml" />
<classpath>
<pathelement location="${instrument}" />
<pathelement location="${build}" />
<pathelement path="${cobertura}/cobertura.jar" />
<pathelement path="lib/junit-4.8.2.jar" />
<pathelement path="lib/hamcrest-core-1.3.0RC2.jar" />
</classpath>
<batchtest todir="${report}">
<fileset dir="${src}">
<include name="**/*Test.java" />
</fileset>
</batchtest>
</junit>
</target>
<target name="report">
<cobertura-report format="xml" destdir="${report}" >
<fileset dir="${src}">
<include name="**/*.java" />
</fileset>
</cobertura-report>
</target>
<target name="sonar" description="analyze project" >
<sonar:sonar workDir="/tmp/sonar/test10" key="com.example.test10:test10" version="0.1">
<property key="sonar.jdbc.url" value="jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8" />
<property key="sonar.jdbc.driverClassName" value="com.mysql.jdbc.Driver" />
<property key="sonar.jdbc.username" value="sonar" />
<property key="sonar.jdbc.password" value="sonar" />
<property key="sonar.host.url" value="http://<SONAR_HOST_NAME>:8080/sonar" />
<property key="sonar.sourceEncoding" value="UTF-8" />
<property key="sonar.java.source" value="1.6" />
<property key="sonar.java.target" value="1.6" />
<sources>
<path location="${src}" />
</sources>
<property key="sonar.projectName" value="Sonarサンプル" />
<property key="sonar.dynamicAnalysis" value="reuseReports" />
<property key="sonar.cobertura.reportPath" value="${report}/coverage.xml" />
</sonar:sonar>
</target>
<target name="clean" description="clean up" >
<delete dir="${build}"/>
<delete dir="${instrument}"/>
<delete dir="${report}"/>
<delete file="cobertura.ser"/>
</target>
</project>
<SONAR_HOST_NAME>にSoanrが動作しているホスト名を入力してください。
テスト用クラスの名前は「~Test」としていることを前提としています。
Ant書式の参考 :
- http://cobertura.sourceforge.net/anttaskreference.html
- http://ant.apache.org/manual/Tasks/junit.html
実行
Jenkinsで新規Jobを作成します。Antのターゲットは「compile instrument test report sonar」とします。
JenkinsでJobを実行します。
実行後、Sonarのダッシュボードにカバレッジ率が表示されています。
更新履歴
- ページ作成 -- 2011年5月5日 (木) 21:25 (JST)