VSCodeでC#のUnit Testを書けるようにするためのセットアップ
主催してるTDD(Test Driven Development)の勉強会でVSCodeでC#のUnit Testを書けるようにするためのセットアップをしたので備忘のために手順を残しておきます。
前提(最初に必要なもの)
- VSCodeのインストール
https://code.visualstudio.com/ - .Net Coreのインストール
https://dotnet.microsoft.com/ja-jp/download/dotnet - C#の拡張機能をVSCodeにインストール
https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp - テスト対象のプロジェクトが作成されている
(作成していない場合、VSCodeのターミナルで下記コマンドを叩いて作成してください)
dotnet new console -n {YourProjectName}
// {YourProjectName}は任意のProject名を入れてください。
プロジェクトを作成したら下記コマンドでVSCodeのworkspaceを切替
cd YourProjectName
code .
Unit Testのために必要なもの
- .Net Core Test ExplorerをVSCodeにインストール
https://marketplace.visualstudio.com/items?itemName=formulahendry.dotnet-test-explorer
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ではその利点はあんまりないというか多分ゼロなのでお好みで!)
-
MSTest
Microsoftが提供してるFW。Visual Studioに標準で組み込まれてるのでVSユーザーにはこちらが馴染み深いかも。
https://learn.microsoft.com/ja-jp/dotnet/core/testing/unit-testing-with-mstest -
NUnit
https://learn.microsoft.com/ja-jp/dotnet/core/testing/unit-testing-with-nunit
オープンソース製の.NetのためのUnit Testing FW。JavaのJUnitを.Net向けにしたやつ。
長い歴史があるけどあまりこれを使ってる人を見たことがない、、、、 -
x Unit
https://learn.microsoft.com/ja-jp/dotnet/core/testing/unit-testing-with-dotnet-test
最近出てきたオープンソース製の.Net用のUnit Testing FW。
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で推奨とされている設定
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