.NETでのカバレッジ計測ツールOpenCover
2011年のうちに記事を書こうと思います。
C#で開発する際のカバレッジ測定ツールとしては、NCoverやPartCoverが有名ですが、今回はOpenCoverというツールを紹介します。
OpenCoverは、@scubamukiさんが開発しているカバレッジツールで以下から入手可能です。
https://github.com/sawilde/opencover
インストールは、セットアップを実行するだけです。
OpenCoverの他にレポート生成ツールも導入しておきましょう。
以下から入手可能です。
http://www.palmmedia.de/Net/ReportGenerator
ダウンロードしたファイルを適当な場所に解凍しましょう。
日本語の紹介はまだないようなので、ここで紹介しておきます。
サンプル:OpenCoverSample.dll ファイル:Class1.cs namespace OpenCoverSample { public class Class1 { public int func1(int a,int b) { if (a == 0 || b == 0){ return 0; } else if (a == 1 || b == 1){ return 1; } else if (a == 1 && b == 1){ return 2; } else{ return -1; } } } }
テスト:OpenCoverSampleTest.dll ファイル:UnitTest1.cs namespace OpenCoverSampleTest { [TestClass] public class UnitTest1 { public UnitTest1() { (省略) [TestMethod] public void func1Test() { Class1 obj = new Class1(); Assert.AreEqual(0, obj.func1(0, 1)); Assert.AreEqual(1, obj.func1(2, 1)); Assert.AreEqual(1, obj.func1(1, 2)); } } }
テストはカバレッジを確認するために、わざと不十分にしています。
では早速、OpenCoverでカバレッジを計測してみましょう。
OpenCoverはコマンドラインで実行しますが、オプションが長いのでバッチファイルを作成しておくのが良いでしょう。
今回のサンプルをカバレッジ計測する場合のバッチファイルの例を以下に示します。実行する環境に合わせてディレクトリ名は変えてください。
バッチファイル例 rem VS2010のインストール先 set vs2010_home=C:\Program Files (x86)\Microsoft Visual Studio 10.0 rem OpenCoverのインストール先 set opencover_home=C:\Program Files (x86)\OpenCover rem 実行するテストのアセンブリ set target_test=OpenCoverSampleTest.dll rem 実行するテストのアセンブリの格納先 set target_dir=C:\Users\ユーザ名\Documents\Visual Studio 2010\Projects\OpenCoverSample\OpenCoverSampleTest\bin\Debug rem レポート生成ツールのインストール先 set reportgen_dir=C:\Tools\ReportGenerator_1.2.3.0 rem カバレッジ計測対象の指定 set filters=+[OpenCoverSample]* rem パスの設定 set path=%path%;%opencover_home%;%reportgen_dir%\bin rem OpenCoverの実行 OpenCover.Console -register:user -target:"%vs2010_home%\Common7\ide\mstest.exe" -targetargs:"/noisolation /testcontainer:%target_test%" -targetdir:"%target_dir%" -filter:"%filters%" -output:result.xml -mergebyhash rem レポートの生成 reportgenerator "result.xml" %reportgen_dir%\html
OpenCoverのオプションの詳細については、以下に説明があります。
https://github.com/sawilde/opencover/wiki/Usage
バッチファイルを実行すると、レポート生成ツールのインストール先にhtmlというフォルダが生成されているはずです。
index.htmlを開く以下のようなレポートが表示されます。
カバレッジを見ると61.5%になっています。
OpenCoverSample.dllのOpenCoverSample.Class1をクリックすると、詳細が見れます。
カバレッジは、Sequence CoverageとBranch Coverage、カバレッジの他にCyclomatic Complexityも計測できています。
各行には実行の有無を示す色付けと実行回数が表示されます。
このようにバッチファイルを作っておくと、簡単にカバレッジを測定できるだけではなく、Team Foundation Serverの自動ビルドでも活用することができます。
OpenCoverはまだまだ使っている人は少なそうですが、アップデートは活発に行われていますので今後に期待しています。