VisualStudioで実行した単体テストの結果の出力(3)
テスト実行からレポート生成までをツールで自動化

2021年2月27日

どもです。

前々回前回と、VisualStudio/C#での単体テストの効率化について書いてきました。
特に前回は、pythonでテスト結果のXMLを解析してHTMLに表示する、という方法を書きました。
今回は、「テストの実行」と「結果をHTMLに変換する」処理を一括で実行するツールを作成したので、それについて記載します。

1.概要図

VisualStudio/C#の単体テストの実行からレポートの生成までの一括実行の処理の流れを、簡単ですが下図に示します。
test_result_of_vs_003_001
簡単ですが流れを解説すると、pythonからVisualStudio付属のツールを用いて単体テストの実施とカバレッジの測定を実施します。
次に、テスト結果とカバレッジを入力に、pythonでHTML形式のレポートを生成します。
生成されたHTMLレポートのページ構成(イメージ)を、下図に示します。
test_result_of_vs_003_002
トップページには、実行したテストの件数と総合的な結果が表示されます。
また、テスト結果の詳細とカバレッジへのリンクも表示されます。
トップページのテスト結果へのリンクを選択すると、単体テスト結果詳細(成功/失敗)のページが表示されます。
トップページのカバレッジへのリンクを選択すると、カバレッジ測定結果のページが表示されます。

2.結果

上記のイメージを実装、実行した結果を下に示します。
まず「/index.html」です。
この画面では、実行したテストの件数と(成功/失敗といった)詳細情報が表示されます。
test_result_of_vs_003_003
各テストの名前をクリックすることで、実行されたテストケースの一覧とそれぞれの結果、および実行した日が表示されます。
test_result_of_vs_003_004
また「Coverage」をクリックすることで、カバレッジの測定結果に遷移します。
今回は、OpenCoverageで生成したカバレッジを表示しています。
test_result_of_vs_003_005

3.設定

さて。
作成したツールの設定について、少し解説します。

3.1.ツールの設定

まず、今回実行した際の設定です。

<?xml version="1.0" encoding="utf-8"?>
<UnitTestAutoRunConfig>
    <Tools>
    <UnitTest>
        <Runner
        name="vstest.console.exe"
        path="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\TestWindow\"
        />
        <Coverage
        name="OpenCover.Console.exe"
        path="C:\Users\xxxx\.nuget\packages\opencover\4.7.922\tools\"
        />
        <ReportGenerator
        name="ReportGenerator.exe"
        path="C:\Users\xxxx\.nuget\packages\reportgenerator\4.5.3\tools\netcoreapp3.0\"
        />
    </UnitTest>
    </Tools>
    <UserConfig>
    <TestTarget Path=".//Targets.xml" />
    </UserConfig>
</UnitTestAutoRunConfig>

この通り、XML形式です。
「UnitTest」タグで単体テストで使用する各ツールの設定を行います。
また、各子要素の属性でツールの名前(name)やパス(path)を設定するようにしています。
UnitTestタグの子要素で有効なタグは「Runner」、「Coverage」、および「ReportGenerator」です。
これらの設定を自分の環境に合せて修正してください。
実行するテスト対象は、別ファイルに設定します。
テスト対象を設定したファイルへのパスは、「TestTarget」タグのPath属性で設定します。

3.2.テスト対象の設定

続いて、テスト対象の設定です。
今回のエントリで使用した、テスト対象の設定です。

<?xml version="1.0" encoding="utf-8"?>
<Targets>
    <UnitTest name="UnitTest_Param" ext="dll" path="E:\development\CStubMk\dev\dev\UnitTest_Param\bin\Debug\netcoreapp3.0\"/>
    <UnitTest name="UnitTest_StubHeaderFile" ext="dll" path="E:\development\CStubMk\dev\dev\UnitTest_StubHeaderFile\bin\Debug\netcoreapp3.0\"/>
</Targets>

テスト設定もXML形式です。
「Targets」タグの子要素である「UnitTest」で、実行するテストを設定します。
これは、実行したいテスト毎に作成します。
今回の例では、テストを2つ実行しているので、UnitTestタグを2つ作成しています。
「UnitTest」タグのname属性で、テストを実行する「ファイルの」名前を指定します。
即ち、「Runner」タグで指定したツールに渡すファイルの名前を指定します。
ext属性では、name属性で指定したファイルの拡張子を指定します。
今回の例では、「dll」を設定しています。
path属性には、name属性に指定したファイルの配置場所へのパスを指定します。

4.公開しています

今回作成したツールは、GitHubにて公開しています。
使ってみてください。

5.まとめ

3回にわたって、VisualStudio/C#でのテスト結果とカバレッジ測定の結果を出力する方法を書いてきました。
最終的には、HTML形式による結果の読める化(見える化!?)を実現しました。
これで、テストの実行からレポートの生成までを簡単に、効率的に実行できるようになったかと思います。

ではっ!