LoginSignup
18
24

More than 1 year has passed since last update.

C# の単体テストのコードカバレッジの結果をWeb形式で出力する

Posted at

はじめに

本稿は、C#の単体テストのコードカバレッジの結果をWeb形式で出力する手順の紹介です。
以下の Microsoft の公式ページをもとに私が確認した内容を説明します。
単体テストにコードカバレッジを使用する

ざっくり要点を説明すると、Coverlet というカバレッジの計測結果を出力する nuget ライブリを使って XML ファイルを出力してから、ReportGenerator という .NET ツールでその XML ファイルを入力に HTML ファイルのレポートページを出力します。
上記はコマンドラインで実行できます。

カバレッジの出力手順

対象のプログラム

以下のクラスをテスト対象とします。

namespace ConsoleAppSample.Samples
{
    public class Person
    {
        public string Name { get; private set; } = string.Empty;

        public void ChangeName(string name)
        {
            Name = name;
        }

        public int GetNameLength()
        {
            return Name.Length;
        }
    }
}

上記クラスをテストするためのテストクラスを以下とします。

namespace ConsoleAppSampleTest
{
    public class PersonTest
    {
        [Fact]
        public void ChangeNameTest()
        {
            var person = new Person();
            person.ChangeName("xxx");

            Assert.Equal("xxx", person.Name);
        }
    }
}

上記のテストクラスのテストフレームワークは、xUnit を利用しています。
C#の有名なテストフレームワークは、MSTest、NUnit、xUnitの3つがありますが、以下の記事の通り xUnit が人気なので、本稿では xUnit を利用します。

レポートの出力手順

coverlet.collector で XML ファイルを出力

まず、単体テスト用のプロジェクトに、coverlet.collector というライブラリを nuget からインストールします。
(テストフレームワークに xUnit を利用している場合は、既定でインストールされています)

coverlet.collector をインストールしたら、以下のコマンドをコマンドプロンプトから実行して、カバレッジの結果をXML形式で出力します。
ちなみに、Visual Studio のメニューから [表示] - [ターミナル] で表示するウィンドウからでも実行できます。
dotnet test --collect:"XPlat Code Coverage"

上記のコマンドが成功すれば、以下のファイルパスにカバレッジの結果が記載されたXMLファイルを出力します。
{テストプロジェクトのファイルパス}\TestResults\{guid}\coverage.cobertura.xml

ReportGenerator で HTML ファイルを出力

次に、ReportGenerator というツールを用いて HTML ファイルを出力します。
そのために、以下のコマンドで、.NET グローバル ツールとして ReportGenerator をインストールします。
dotnet tool install -g dotnet-reportgenerator-globaltool

Reportgenerator をインストールしたら、以下のコマンドで、coverlet.collector が出力した XML ファイルを入力に HTML ファイルのレポートページを出力します。
reportgenerator -reports:"{テストプロジェクトのファイルパス}\TestResults\{guid}\coverage.cobertura.xml" -targetdir:"coveragereport" -reporttypes:Html

上記のコマンドが成功すると、ソリューションフォルダの直下に coveragereport というフォルダが作成され、その中に HTML ファイルのレポートページが作成されます。

レポートページの内容

出力したレポートページの例を記します。
図のように、アセンブリ数、クラス数、メソッド数、テストでカバーしている行数、カバーしていない行数などのメトリクスを記した表と、クラスごとのカバレッジを記した表があります。
image.png

上図で、クラス名のリンクをクリックすると、そのクラスのメトリクスを表示します。
image.png

さらにスクロールすると、ソースコードが表示されて、カバーしている行とカバーしていない行がどこなのか分かります(カバーしていない行にマウスホバーすると Not Covered と表示されます)。
image.png

その他、ReportGenerator についての詳細は公式ページを参照ください。
https://github.com/danielpalme/ReportGenerator

まとめ

C#の単体テストのコードカバレッジの結果をWeb形式で出力する手順を紹介しました。
CIと連携するのも良さそうです。

ちなみに私は、普段はエンジニアリングマネージャーとして、チームの皆で楽しく開発する施策を色々実施しています。詳しくは以下を参照ください。

Twitterでも開発に役立つ情報を発信しています → @kojimadev

18
24
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
24