📝

VSCodeでC#のUnit Testを書けるようにするためのセットアップ

2023/09/18に公開

主催してるTDD(Test Driven Development)の勉強会でVSCodeでC#のUnit Testを書けるようにするためのセットアップをしたので備忘のために手順を残しておきます。

前提(最初に必要なもの)

dotnet new console -n {YourProjectName}

// {YourProjectName}は任意のProject名を入れてください。

プロジェクトを作成したら下記コマンドでVSCodeのworkspaceを切替

cd YourProjectName
code .

Unit Testのために必要なもの

TestProjectのソリューションフォルダ構成

C#でUnit Test Projectを作成する場合、こんな感じのソリューションフォルダ構成になります

MySolution/
├── MySolution.sln
├── MyProject/ ←テスト対象プロジェクト
└── MyProject.Tests/ ←テストプロジェクト(ここにMyProjectのUnit Testを作成)

こんな感じで、テスト対象のプロダクトコードがあるProjectに対応するような形で{テスト対象のProject名}.Testsの命名規則でテストプロジェクトを作成します。

C#の単体テストフレームワーク

C#の単体テストのフレームワークはMS Test, NUnit, x Unitの主に3つです。
(厳密にいうとC#のUnit Testing FWではなく.NetのUnit Testing FW)
FWによってテストメソッドの定義の仕方やテストのセットアップ/クリーンアップの定義の仕方が違うのでお好みで。
(個人的にはVSに標準で組み込まれてるMS Testの方がVisual Studioで開発するときにはすぐに使えるのでVS Userにはこちらがおすすめだけど、VSCodeではその利点はあんまりないというか多分ゼロなのでお好みで!)

Project作成→TestProject作成まで

必要なものを全てインストールしたら、下記のステップでUnit Testを書ける状態にするためのセットアップをしていきます。

1..NET Core Test Explorerの拡張機能にTestProjectのpathを設定

拡張機能→.NET Core Test Explorerの設定を押下

Dotnet-test-explorer: Test Project Pathに**/*Tests.csprojを設定。
※テストプロジェクトの命名規則として、{YourProject}.Testsにするのが一般的なので、この設定だと全ての.Tests.csprojをテスト対象とできる。

.NET Core Test Explorer拡張機能のドキュメントのSettings examplesで推奨とされている設定
https://marketplace.visualstudio.com/items?itemName=formulahendry.dotnet-test-explorer

2.Test Prpjectを作成

下記コマンドを実行して単体テストフレームワークに応じたTest Projectを作成。

  • MS Testを使う場合
dotnet new mstest -n YourTestProjectName
  • N Unitを使う場合
dotnet new nunit -n YourTestProjectName
  • x Unitを使う場合
dotnet new xunit -n YourTestProjectName

3.作成したTest Projectの.csprojにテスト対象のプロジェクトの参照を追加

作成したTest Projectの.csprojファイルに、このTest Projectでテストする対象のプロジェクトの参照を追加して、Test Project - テスト対象プロジェクト の紐づけを行います。
下記コマンドを実行して参照を追加してください。

cd {YourTestProjectName}
dotnet add reference ../{YourMainProjectPath}/{YourMainProjectName}.csproj

// dotnet add reference {参照するpath}で指定されたpathにあるProjectの参照を追加

ここのパスは下記のように、テスト対象のプロジェクトの.csprojファイルを右クリック⇒Copy PathもしくはCopy Relative Pathを選択して取得できます。

Test Projectの.csprojにテスト対象のプロジェクト参照が追加されると、こんな感じでTest Projectの.csprojファイルの<ItemGroup>にテスト対象プロジェクトのパスが追加されます。

単体テストの実行

.NET Core Test Explorerの拡張機能を入れてTest Projectのpathを**/*Tests.csprojにしているので、これでTest ExplolerでTests.csprojのsufixがついているプロジェクトをテスト対象としてTest Explorerで検知して、実行できるようになっています。
左メニューのフラスコのアイコン(Testing)からTest Explorerにいくと、現時点で作成されているTest ProjectのTest Methodが表示されます。白矢印のアイコンを押下すると、Test Explorerに表示されているテストが実行されます。

1つのTest Methodだけ実行したい場合、特定のTest Methodを選択してその横の実行ボタンを押すとそのテストだけが実行されます。

Discussion