hudsonでMSTestのテスト結果とカバレッジをレポートする設定をしてみた。

こんな感じでhudsonに表示される。


手順は以下。自分用のメモなので雑です!
バッチファイルを作って、hudsonから叩く。

過去の結果があれば削除
del MsTestSample\TestResults\TestResults.trx rmdir /S /Q MsTestSample\TestResults\TestResult
テスト実行
"C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\MSTest.exe" /runconfig:MsTestSample\LocalTestRun.testrunconfig /testcontainer:MsTestSample\TestMsTestSample\bin\Debug\TestMsTestSample.dll /resultsfile:MsTestSample\TestResults\TestResults.trx
カバレッジを出力(カバレッジxmlデータに変換)
C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe MsTestSample\GenerateCoverage.build
カバレッジを出力(xmlデータをemma用に変換)
C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe MsTestSample\ConvertToEmma.build

カバレッジデータはバイナリなので、xmlに変換して、それをさらにEmmaデータに変換してる。
hudsonからはMSTest PluginとEmma Pluginを入れておけばレポートが見える。
テスト結果は、デフォルトではテスト実行の日時が入るので、.testrunconfigにテスト結果のファイル名を固定にするように別途設定が必要。
カバレッジをとる設定(インストルメント化する項目の設定)も.testrunconfigに設定しておく。
カバレッジを取る設定は、プロジェクトを増やすたびに手動で設定しないといけない。(追加するスクリプト書いてもよいけど。)
あと、テストは、ひとつのテストプロジェクトに突っ込んでおいたほうが自動テストするときにやりやすいかなと思った。
テストをプロジェクト毎にわけると、MSTest.exeの実行時にtestcontainerオプションで、そのプロジェクト(dll)を指定しないといけないので。
テストプロジェクトが膨れ上がって、テストプロジェクトのビルドが遅くなるという欠点はあるかも。


GenerateCoverage.buildの内容は、以下のとおり。



    

    
        
        
    

使っているdllは、以下からダウンロードできる。

http://code.msdn.microsoft.com/vscoveragetoxmltask


ConvertToEmma.buildの内容は、以下のとおり。



    
     "C:\Program Files\msxsl\msxsl.exe"
    

    
      
    


msxslとmsxmlのダウンロードが必要。
MSTestCoverageToEmma.xslは、以下からダウンロードできる。

http://wiki.hudson-ci.org/pages/viewpageattachments.action?pageId=41878013&metadataLink=true



参考サイト:
http://wiki.hudson-ci.org/display/HUDSON/MSTest+Coverage+Reports