Hudsonの使い方⑳ Hudsonでユニットテスト網羅率測定(.NET)
.NETプロジェクトでも、
ユニットテストの網羅率(カバレッジ)測定をしてみます。
Slave端末にPartCoverをインストールします。
PartCoverをダウンロードしてインストールします。
Slave端末にReportGeneratorをインストールします。
ReportGeneratorをダウンロードして適当なフォルダに展開します。
ReportGeneratorを使って、PartCoverが出力したカバレッジをHTMLに変換します。
PartCover、ReportGeneratorをNAntから実行できるようにdefault.buildを追加します。
管理しやすいように、以前に作ったdefault.buildと分けて作りました。
■coverage.build
<?xml version="1.0" encoding="utf-8"?> <project name="UnitTestCoverage" default="coverage" basedir="."> <!-- ========================================================== --> <!-- 定義値 --> <!-- ========================================================== --> <property name="coverage.dir" value="coverage"/> <property name="partcover.home" value="C:/Program Files/Gubka Bob/PartCover .NET 2.3"/> <property name="nunit.home" value="C:/Program Files/NUnit 2.5.2/bin/net-2.0"/> <property name="reportgenerator.home" value="C:/ReportGenerator0.7.0.0"/> <property name="partcover.target" value="HelloNUnitTest.dll"/> <property name="partcover.include" value="[HelloNUnit]*.*"/> <property name="partcover.exclude" value="[HelloNUnit]*.Properties.*"/> <property name="partcover.out" value="coverage.xml"/> <!-- ========================================================== --> <!-- NAntタスク実行順序 --> <!-- ========================================================== --> <target name="coverage"> <call target="clean" /> <call target="partCover" /> <call target="reportGenerator" /> </target> <!-- ========================================================== --> <!-- ディレクトリをクリア --> <!-- ========================================================== --> <target name="clean"> <delete dir="${coverage.dir}" /> <mkdir dir="${coverage.dir}" /> </target> <!-- ========================================================== --> <!-- PartCover実行 --> <!-- ========================================================== --> <target name="partCover"> <exec program="${partcover.home}/PartCover.exe"> <arg value="--target" /> <arg value="${nunit.home}/nunit-console.exe" /> <arg value="--target-args" /> <arg value="${partcover.target}" /> <arg value="--target-work-dir" /> <arg file="${bin.dir}" /> <arg value="--output" /> <arg value="${coverage.dir}/${partcover.out}" /> <arg value="--include" /> <arg value="${partcover.include}" /> <arg value="--exclude" /> <arg value="${partcover.exclude}" /> </exec> <!-- テスト結果XMLをコピー --> <copy file="${bin.dir}/TestResult.xml" tofile="${report.dir}/TestResult.xml" /> </target> <!-- ========================================================== --> <!-- ReportGenerator実行 --> <!-- ========================================================== --> <target name="reportGenerator"> <exec program="${reportgenerator.home}/bin/reportGenerator.exe"> <arg file="${coverage.dir}/${partcover.out}" /> <arg file="${coverage.dir}" /> </exec> </target> </project>
default.buildを変更します。
NAntタスク実行順序でカバレッジ有り/無しを指定して、
ユニットテストを実行できるようにしておきます。
■default.build
<?xml version="1.0" encoding="utf-8"?> <project name="UnitTestProject" default="build" basedir="."> <!-- ========================================================== --> <!-- 定義値 --> <!-- ========================================================== --> <property name="nant.settings.currentframework" value="net-3.5" /> <property name="bin.dir" value="bin"/> <property name="report.dir" value="report"/> <!-- ========================================================== --> <!-- NAntタスク実行順序 --> <!-- ========================================================== --> <target name="build"> <call target="clean" /> <call target="compile" /> </target> <target name="build-unitTest"> <call target="build" /> <call target="unitTest" /> </target> <target name="build-unitTest-coverage"> <call target="build" /> <nant buildfile="coverage.build" target="coverage" /> </target> <!-- ========================================================== --> <!-- ディレクトリをクリア --> <!-- ========================================================== --> <target name="clean"> <delete dir="${bin.dir}" /> <delete dir="${report.dir}" /> <mkdir dir="${bin.dir}" /> <mkdir dir="${report.dir}" /> </target> <!-- ========================================================== --> <!-- コンパイル --> <!-- ========================================================== --> <target name="compile"> <msbuild verbosity="Minimal"> <property name="Configuration" value="Release" /> <property name="OutputPath" value="..\${bin.dir}"/> </msbuild> </target> <!-- ========================================================== --> <!-- ユニットテスト実行 --> <!-- ========================================================== --> <target name="unitTest"> <nunit2 failonerror="false" verbose="true"> <formatter usefile="true" type="Xml" extension=".xml" outputdir="${report.dir}"/> <test> <assemblies basedir="${bin.dir}"> <include name="*Test.dll"/> </assemblies> </test> </nunit2> </target> </project>
プロジェクトの設定でNAntの呼び出しを変更します。(赤枠の部分です)
targetをbuild-unitTestからbuild-unitTest-coverageに変更します。
HTML Publisher pluginをインストールします。
ジョブの設定でPublish HTML reportsをチェック
ReportGeneratorの出力結果ファイルを指定します。(赤枠の部分です)