技術情報ブログ
c#
2021.09.01

C# xUnitを使用したVSCodeでの自動テスト

C# xUnitを使用したVSCodeでの自動テスト

こんにちは、アーティサン株式会社の戸田隆俊と申します。

私は主に C#でのバックエンド開発を担当しております。

コーディングとテストは切っても切り離せないものです。システムを開発したらテストが必要ですし、改修をしたら再テストが発生します。

初回のテストは仕方ありませんが、同じような内容を、それも人力で1 件 1 件テストをするのは非効率な気がしませんか?

また、どれだけしっかりとしたテスト計画書を作成してもヒューマンエラーは防ぎようがありません。

そんなあなたに朗報です!

再テストの負荷を軽減する方法があります!

今回は xUnit を使用した VSCode での単体テストの自動化についてご紹介致します。

自動化することにより再テスト時のコストを削減し、ヒューマンエラーを防ぐことが出来ます。

xUnitは Visual Studio でも利用できますが、他のブログで見受けられる+ Visual Studio ではライセンス費用がかかる点から今回は VSCode でのご紹介とします。

 

環境

  • .Net Core 3.1
  • xUnit .net 2.4.1
  • Visual Studio Code 1.58.2

 

xUnit とは

正式名称はxUnit.netです。.NET Framework.Net Coreで利用できる単体テストツールです。

こちらを利用することで自動テストが可能となります。

他にも NUnit、MSTest といった類似ツールがありますが、一番人気があるのはxUnitとなっています。

 

前提条件

xUnit を導入する前に自動テストの対象となるプロジェクトが必要になります。

簡単に説明しますが、本題ではないので不要な方は以下リンクから読み飛ばしてください。

自動テストの実装

 

テスト対象プロジェクトの準備

まずは VSCode を起動し、ターミナルから以下のコマンドを実行してプロジェクトを作成します。

自動的に作成されたClass1.csAddメソッドを追加します。 以下、追加後のクラスです。

dotnet new classlib -n Test -f netcoreapp3.1

namespace Test
{
    public class Class1
    {
        public static int Add(int value1, int value2) => (value1 + value2);
    }
}

以上でプロジェクトの準備は完了となります。

 

自動テストの実装

いよいよ自動テストを実装していきます。
まずは xUnit のテストプロジェクトを作成します。

 

テストプロジェクト作成

ターミナルから以下のコマンドを実行します。

dotnet new xunit -n UnitTests -f netcoreapp3.1

テストプロジェクトから対象プロジェクトを参照できるようにします。

dotnet add ./UnitTests/UnitTests.csproj reference ./Test/Test.csproj

 

テストロジック実装

テストロジックを実装します。
xUnitでは以下のような条件をチェックできます。

アサート名概要
Equal一致を確認
NotEqual不一致を確認
Sameインスタンスの一致を確認
NotSameインスタンスの不一致を確認
Contains含まれることを確認
DoesNotContain含まれないことを確認
InRange範囲の間であることを確認
NotInRange範囲の間に含まれないことを確認
IsAssignableFrom代入できるかを確認
Empty初期値であることを確認
NotEmpty初期値でないことを確認
TrueTrue であることを確認
FalseFalse であることを確認
IsType型一致を確認
IsNotType型不一致を確認
NullNull であることを確認
NotNullNNull でないことを確認
ThrowsN例外が発生することを確認

今回はサンプルとしてEqualを使用します。

自動作成されたUnitTest1クラスのTest1メソッドを以下のように修正します。

8 行目で 1+1=2 となることをテストしています。

namespace UnitTests
{
    public class UnitTest1
    {
        [Fact]
        public void Test1()
        {
            Assert.Equal(2, Test.Class1.Add(1, 1));
        }
    }
}

最後にテストを実行します。

ターミナルから以下のコマンドを実行します。

cd UnitTests

dotnet test

以下のようなテスト結果が出力されれば成功です。

合計 1 個のテスト ファイルが指定されたパターンと一致しました。
成功! -失敗: 0、合格: 1、スキップ: 0、合計: 1、期間: < 1 ms - UnitTests.dll (netcoreapp3.1)

 

論理的なテスト

xUnit は複数のデータセットに対してテストを実行することも可能です。

以下は例として 1+2=2、3+7=10 となることをテストするメソッドTest2を追加しています。

データセットを使用する場合は 11 行目のようにTheoryとする必要があります。

namespace UnitTests
{
    public class UnitTest1
    {
        [Fact]
        public void Test1()
        {
            Assert.Equal(2, Test.Class1.Add(1, 1));
        }

        [Theory]
        [InlineData(1, 1, 2)]
        [InlineData(3, 7, 10)]
        public void Test2(int value1, int value2, int expected)
        {
            Assert.Equal(expected, Test.Class1.Add(value1, value2));
        }
    }
}

以下は実行結果です。

合格の件数ですが、Test1の結果 1 件+Test2のデータセット 2 件で 3 件となっています。

合計 1 個のテスト ファイルが指定されたパターンと一致しました。
成功! -失敗: 0、合格: 3、スキップ: 0、合計: 3、期間: 3 ms – UnitTests.dll (netcoreapp3.1)

 

(おまけ)拡張機能 .Net Core Test Explorer

VSCode のアドバンテージの一つに豊富な拡張機能があげられます。

今回は自動テストに便利な.Net Core Test Explorerをご紹介致します。

こちらの拡張機能ではサイドバーからのテスト実行や、テスト結果の可視化が出来ます。

Marketplace で.Net Core Test Explorerを検索してインストールをクリックすることで拡張機能が導入されます。

 .Net Core Test Explorer を検索してインストールをクリックすることで拡張機能が導入

拡張機能の設定を行います。

設定から Test Project Path に**/*Tests.csprojを入力します。

.Net Core Test Explorer設定

左側のフラスコマークをクリックすることでテスト一覧が表示されます。

テスト一覧表示

再生ボタンを押すことで各テストが実行されます。

こちらの拡張機能を使用することでより分かりやすくテスト結果を確認出来ます。

テスト結果

 

あとがき

いかがでしたでしょうか?

このようにテストを自動化することによって、一定品質を保証し、再テストの工数削減も可能です。

仕様変更・改修が頻繁に発生するプロジェクトや、アジャイル開発を採用しているプロジェクトにマッチします。

ただし、テストロジックを実装する必要があるため開発工数は増加してしまいます。 そのため、ウォーターフォール開発を採用している、仕様変更が発生しないようなプロジェクトには向いていません。

自身のプロジェクトに照らし合わせて慎重に導入を検討して頂ければと思います。

C#のバックエンド開発を担当:戸田隆俊

戸田隆俊

🖊戸田隆俊さんのブログ一覧はこちら

SE歴は約9年間!2021年3月にアーティサンに入社し、主にC#のバックエンド開発を担当しています。

新しいもの好きで新機能はどんどん使っていきたいタイプです。

かゆいところに手が届くような記事を作っていければと思います。

ちなみに趣味は映画鑑賞(ファンタジー系)でアマプラにドはまりしてます!

Microsoftクラウド関連

シェアする
記事カテゴリ
最新記事
2025.10.15

SharePoint×Power Automate:承認フローの作り方完全ガイド(第1回:事前設定編)

2025.10.01

Copilot Studio活用アイデア(1):Microsoft Learn Docs MCP サーバーと連携したFAQエージェント

2025.09.17

Power Appsモデル駆動型アプリ×SharePoint統合:エンティティに基づくとは?

2025.09.03

SharePointサイトを効率展開!テンプレート化3つの方法を比較してみた

2025.08.27

SharePointで社内ポータルを作りたいと思ったときに読むブログ(後編)

コンテナ簡易在庫管理ローコード開発ビジネスルールアクセス許可Artisanスライドショーデザイン拡張コミュニケーションサイトカスタムコネクタAccessCSSBreakpointObserverリマインドコレクションセキュリティグループSharePoint Online異動ショートカットキー時間外非エンジニアDataverseSharePoint Framework転職Slide showMicrosoft365サイトの種類OpenAPIInfoPathxUnitメディアクエリSet複数の添付ファイル送信元リストLoopshortcut key通知体験談JavaScriptSPFx主キー比較移行要件定義MCPサーバーMatTable.Net Core 3.1スマホForAll承認フローメールの送信非表示Microsoftconcat関数ファイル勉強表示サンプルCopilot Studio社内ポータル多言語化サイト構成FAQエージェントAngular MaterialVSCodePCUpdateContextform差出人アプリdesign文字制限フィルター クエリ内製化切替samplePowerAppsグループウェアMUI権限設計AIチャットボットデータ構造.Net Core Test Explorerレスポンシブロードマップエクスポートインスタントクラウドフロー[市民開発者JSONフロー実行ドキュメント ライブラリ市民開発登録者X-SPNFCタグエンゲージメントMultilingualデータ移行実運用モデル駆動型アプリSortByColumns関数Dataverse for Teams入門技術インポート自動化したクラウドフロー構築デザイン開発環境filter query管理システム列StyleDLPポリシー地方自治体MLJSON書式保守性Power AppsTypeScriptitem関数初心者Itカスタマイズ委任自動化したクラウド フロー運用環境sortガバナンス登録日StudioTestCopilot Studiot共有リンクテンプレート化DX推進Power PlatformHTMLGoogle Maps中級者DXcomponentVBAフローの種類選択肢列本番環境ソートerror notification更新者AICanvas自治体DXレポート化サイト複製作り方SharePointEF CoreMarker Clustererキャンバスアプリ情報技術ダイアログエラーインスタント クラウド フロー参照列ライセンスmultiple itemエラー通知更新日生成系AITest Studio生成AI自治体APIPnP PowerShellページ承認ExcelマイグレーションRANK()関数DatePickerメッセージIDコンポーネントエクセルスケジュール済みクラウド フローChatGPT環境構築手順複数項目削除変更Copilotテスト事例HTTP リクエストカスタムスクリプトドキュメント管理Power AutomateFramework CoreDynamics 365 SalesDropdownメールdialogerrorレスポンシブ レイアウトOpenAIpipelineシェアポイントフォルダ外部DBlicenseテストスタジオ活用ワーケーション業務効率化IT管理C#Attribute directivesMicrosoft Translatorviewfirst()関数Tips復元responsive layoutオープンAICI/CD便利機能ゴミ箱連携添付ファイルコントロール使い方サイトブランド化名古屋ファイル保存申請システムattributeO/Rマッパーマーカークラスタリングライブラリビューnest新機能restoreデータ行の制限チャットGPTパイプラインカレンダー完全削除接続ファイルサイズ基本知識フォントカスタマイズ体験記エンティティワークフロー自動化validationazure sql databasetailwindcssアクセス制限入れ子変数Power BI引き継ぎgalleryDevOpsCalendarモデル駆動型データフローフルリモートワークPowerAutomateブランドセンター感想フォルダ構成設定ローコードCase式マルチテナントノーコード動的リスト検索個人列退職ギャラリーMicrosoft 365Teamsセキュリティロールrecycle binアーティサンX-SP Designテーマ作成チームサイトMicrosoft Learn DocsAngularHTTP Requestドロップダウンメニュー承認collectionMicrosoft 365グループユーザー列所有者を変更スクロール
PageTop
ページトップに戻る