1. はじめに
- C#で作成した単体テストのカバレッジを計測したい
- Visual Studio EnterpriseだとGUIでカバレッジが取得できるが、高価になるのでフリーのツールで代替したい
2. 開発環境
- Widnows 11
- Visual Studio 2022 Community
- MSTEST
- OpenCover (Nuget)
- ReportGenerator (Nuget)
3. 開発環境準備
- NuGetよりインストールする
3.1. OpenCoverのインストール
3.2. ReportGeneratorのインストール
4. サンプルプログラム
4.1. Calculatorクラス (テスト対象)
Calculator.cs
public class Calculator
{
public Calculator()
{
// Do Nothing
}
/// <summary>
/// 足し算をする
/// </summary>
/// <param name="x">値1</param>
/// <param name="y">値2</param>
/// <returns>値1 + 値2</returns>
public int Add(int x , int y)
{
return x + y;
}
- 念のため動作確認をする
private void Form1_Load(object sender, EventArgs e)
{
// 足し算する
var calculator = new Calculator();
var result = calculator.Add(1, 2);
// デバッグ用
Debug.Print(result.ToString());
}
4.2. テストクラス作成
[TestClass()]
public class CalculatorTests
{
[TestMethod()]
[TestCategory("UnitTest")]
public void AddTest()
{
// 期待値
int expected = 3;
// 実行結果
var calculator = new Calculator();
int actual = calculator.Add(1, 2);
// テスト検証
Assert.AreEqual(expected, actual);
}
}
5. カバレッジ取得
- OpenCover, ReportGeneratorを使用する場合、GUI上では実施できないためバッチファイルを作成する
- 実行結果はHTMLへ出力してブラウザ上で確認できるようにする
5.1. バッチファイル作成
- 今回ソリューションフォルダの直下に作成した
@echo off
rem OpenCoverのインストール先
SET OPEN_COVER=%USERPROFILE%\.nuget\packages\opencover\4.7.1221\tools
rem Report生成ツールのインストール先
SET REPORT_GEN=%USERPROFILE%\.nuget\packages\reportgenerator\5.1.18\tools\net6.0
rem テストフレームワークのインストール先
SET MS_TEST=%ProgramFiles%\Microsoft Visual Studio\2022\Community
rem ターゲットアセンブリ (テストクラスがあるDLLファイル)
SET TARGET_TEST=WinFormsApp2Tests.dll
rem ターゲットアセンブリの格納先 (テストクラスがある場所)
SET TARGET_TEST_DIR=C:\Users\user\source\repos\WinFormsApp2\WinFormsApp2Tests\bin\Debug\net6.0-windows
REM カバレッジ計測対象 (テスト対象クラスのNAMESPACE)
SET FILTERS="+[WinFormsApp2]*"
REM パスの設定
SET PATH=%PATH%;%OPEN_COVER%;%MS_TEST%;%REPORT_GEN%
REM OpenCoverを実行 (./CoverageReportフォルダへ結果出力)
OpenCover.Console -register:user -target:"%MS_TEST%\Common7\IDE\Extensions\TestPlatform\vstest.console.exe" -targetargs:"%TARGET_TEST%" -targetdir:"%TARGET_TEST_DIR%" -filter:"%FILTERS%" -output:".\CoverageReport\result.xml"
REM ReportGeneratorrを実行 (./CoverageReportフォルダへ結果出力)
ReportGenerator -reports:".\CoverageReport\result.xml" -reporttypes:Html -targetdir:".\CoverageReport"
pause
5.2. バッチファイル実行
5.3. ReportGeneratorのレポート確認
6. 参考文献