Part Cover 紹介 その4です。以前の記事はこちら
Part Cover 紹介 その1 - Part Cover browser から テストコード(NUnit)のカバレッジを取得する - お だ のスペース
Part Cover 紹介 その2 - Part Cover browser から Windows アプリケーションのカバレッジを取得する - お だ のスペース
Part Cover 紹介 その3 - Part Cover console から テストコード(NUnit)のカバレッジを取得する - お だ のスペース
Part Cover 紹介 その3.5 - Part Cover console 設定ファイルを使用する - お だ のスペース
今回で Part Cover の紹介はひと段落の予定です。
MSBuild で実行する際に、カスタムタスクを作成するわけではなく、Exec タスク を使用して実行します。
※PartCover 用のカスタムタスクを作成している方もおられるようですが、特に困らないので必要ないかな?というのが個人的な感想です。
MSBuild Task for PartCover | Zorched / One-Line Fix
Visual Studio で使うプロジェクトファイル(csproj,vbproj)に直接書くという方法もありますが、個人的には、別に proj ファイルを作成する方法が良いかと思います。(理由は最後に記載) というわけで、MSBuild ファイルはこんな感じです。
WindowsFormsApplication.report.proj
<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="ReportBuild" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <!-- カスタムタスクライブラリ MSBuildCommunityTasksを利用するための設定 Xsltタスクを使用している --> <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" /> <PropertyGroup> <!-- PartCoverのパス --> <PartCoverPath>C:\Program Files\Gubka Bob\PartCover .NET 2.3</PartCoverPath> <ProjectName>WindowsFormsApplication1</ProjectName> <BuildConfig>Debug</BuildConfig> <!-- PartCoverの結果を保存するパス --> <PartCoverResultPath>$(MSBuildProjectDirectory)\PartCoverResult</PartCoverResultPath> <!-- スタイルシートの保存パス --> <XslPath>$(PartCoverResultPath)\xsl</XslPath> </PropertyGroup> <!-- リビルドする --> <Target Name="Rebuild"> <Message Text="Rebuild" /> <MSBuild Projects="$(MSBuildProjectDirectory)\$(ProjectName).sln" Targets="Rebuild;" Properties="Configuration=$(BuildConfig);" /> </Target> <!-- レポートの作成 --> <Target Name="CreateReport"> <Message Text="Exec PartCover" /> <!-- PartCover を実行する --> <Exec Command=""$(PartCoverPath)\PartCover.exe" --settings "$(MSBuildProjectDirectory)\PartCoverSettings2.xml" --output "$(PartCoverResultPath)\PartCoverResult.xml"" /> <!-- Xslt タスクに渡す XML ファイルを指定 --> <CreateItem Include="$(PartCoverResultPath)\PartCoverResult.xml" > <Output TaskParameter="Include" ItemName="PartCoverResult" /> </CreateItem> <Message Text="Create Class Covered Report" /> <!-- スタイルシートの適用 --> <Xslt Inputs="@(PartCoverResult)" Xsl="$(XslPath)\PartCover.class.report.xsl" Output="$(PartCoverResultPath)\ClassCoveredResult.html" /> </Target> <!-- リリースビルドタスク --> <Target Name="ReportBuild" DependsOnTargets="Rebuild;CreateReport;" /> </Project>
このファイルを .sln と同じ階層に配置して、MSBuild で実行します。
これで、MSBuild から Part Cover console を実行して、結果を HTML 変換した物が出来上がります。
MSBuild ファイル(.proj) の説明は、コメント書いてるので雰囲気伝わりますよね?
一点補足:XML を HTML に変換する Xslt タスク は標準の MSBuild タスクではありません!
こちら msbuildtasks.tigris.org の MSBuild.Community.Tasks という物を使っています。
そのために、<Import Project 〜 という一文が必要になります。
※Xslt タスクについては、以前少し紹介しました。MSBuild.Community.Tasks の Xslt を使ってみた - お だ のスペース
ちなみに何故 proj ファイルを別に作ったのかというと、proj ファイルの中でリポジトリからソースコードを取得してから〜とかも書くと、必要なのは proj ファイル1個でビルド対象の .sln やら一式は、リポジトリから取ってくる事も出来ます。なので個人的には分けた方が良いかなと思います。
実際開発に使用する .sln や .csproj、.vbproj とは別に、リリース/レポート用等で別に proj ファイルを作成するのが個人的には好きですね。Hudson 等から ボタン一つでリリース物一式を作成するとかが理想です。