技術情報ブログ
c#
2021.09.01

C# xUnit での単体テスト自動化|VSCode + .NET Core で始めるテスト実装手順

C# xUnit での単体テスト自動化|VSCode + .NET Core で始めるテスト実装手順
戸田隆俊

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

本記事では、C# での単体テストを自動化するために、Microsoft のテストフレームワーク xUnit と無料エディタ Visual Studio Code(VSCode) を使ってテスト環境を構築する手順を丁寧に解説します。本稿を通して、.NET Core プロジェクトにおけるテスト作成と実行の基本を理解できます。

記事内の手順を実装した上で、御社のプロジェクトに最適な 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設定

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

テスト一覧表示

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

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

テスト結果

 

あとがき

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

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

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

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

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

xUnit を用いた単体テストは品質保証と工数削減に直結します。

より包括的なテスト設計・CI/CD 統合支援をご希望の場合はこちらからお問い合わせください。

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

戸田隆俊

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

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

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

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

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

Microsoftクラウド関連

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

ソリューション内で異動・退職者のPower Apps/Power Automateなどを引き継ぐには?所有者変更の手順と注意点を解説

2026.04.15

SharePoint:『リンクのコピー』は危険?権限トラブルを防ぐ推奨運用を解説

2026.04.08

技術ブログ100本書いてみたら、想像以上に得るものがあった話

2026.04.01

社内に聞く人がいない「孤独なDX」を解決!アーティサンの内製化支援サービス

2026.03.25

SharePointの便利なURLパラメータ活用術|ヘッダー削除・リスト絞り込み・メンテナンスモード

SharePointEF CoreMarker Clusterer中級者DXインポート自動化したクラウドフロー構築デザインフロー実行ドキュメント ライブラリ市民開発登録者X-SPNFCタグエンゲージメントMultilingualデータ移行実運用官公庁システム画像挿入プロジェクト作成ユニークキーMVP共有設定ソリューションエクスポート整数ExcelマイグレーションRANK()関数キャンバスアプリノウハウカスタマイズ委任自動化したクラウド フロー運用開発環境filter query管理システム列StyleDLPポリシー地方自治体MLJSON書式保守性デジタル化推進複数レコードPCFギャラリー一意制約技術支援情報漏洩対策権限管理データ型Power AutomateFramework CoreDynamics 365 SalesDatePicker情報技術componentVBAフローの種類選択肢列環境sortガバナンス登録日StudioTestCopilot Studiot共有リンクテンプレート化DX推進テーマカラーPDF変換業務システムURLパラメータ技術ブログ 書き方コマンドバーカスタマイズ組織変更C#Attribute directivesMicrosoft TranslatorDropdownメッセージIDダイアログエラーインスタント クラウド フロー参照列本番環境ソートerror notification更新者AICanvas自治体DXレポート化サイト複製作り方ダークモード資料自動作成キャンバスアプリ 違いメンテナンスモードエンジニア ブログ メリットSharePoint管理センター注文管理アプリattributeO/Rマッパーマーカークラスタリングライブラリviewメールコンポーネントエクセルスケジュール済みクラウド フローChatGPTライセンスmultiple itemエラー通知更新日生成系AITest Studio生成AI自治体APIPnP PowerShellページ承認Formulasプロパティフロー設計Power Apps 導入並べ替えブログ 継続 コツDLPサブグリッドvalidationazure sql databasetailwindcssビューfirst()関数dialogerrorレスポンシブ レイアウトOpenAI環境構築手順複数項目削除変更Copilotテスト事例HTTP リクエストカスタムスクリプトドキュメント管理カラーセットテンプレート活用Power Apps 比較ヘッダー非表示技術力向上権限管理ベストプラクティスDataverse テーブルローコードCase式マルチテナントアクセス制限nestTips復元responsive layoutオープンAIpipelineシェアポイントフォルダ外部DBlicenseテストスタジオ活用ワーケーション業務効率化IT管理カラーユニバーサルデザイン自動化事例モデル駆動型 とはリスト フィルタ文章力 鍛え方野良権限部署AngularHTTP Requestドロップダウンメニューノーコード入れ子新機能restoreデータ行の制限チャットGPTCI/CD便利機能ゴミ箱連携添付ファイルコントロール使い方サイトブランド化名古屋ファイル保存申請システムアプリデザインNode.jsシステム構築便利アウトプット 重要性Teams ファイル共有リレーションシップAccessCSSBreakpointObserver承認動的リスト変数Power BI引き継ぎgalleryパイプラインカレンダー完全削除接続ファイルサイズ基本知識フォントカスタマイズ体験記エンティティワークフロー自動化UI/UXVisual Studio CodeAlternate Key野良アプリ対策IT エンジニア 転職OneDrive1対多InfoPathxUnitメディアクエリリマインドcollection検索個人列退職ギャラリーDevOpsCalendarモデル駆動型データフローフルリモートワークPowerAutomateブランドセンター感想フォルダ構成設定アクセシビリティPCF代替キーCoEブログ モチベーションつながり参照多対多MatTable.Net Core 3.1スマホSetコレクションMicrosoft 365グループユーザー列所有者を変更スクロールMicrosoft 365Teamsセキュリティロールrecycle binアーティサンX-SP Designテーマ作成チームサイトMicrosoft Learn Docsアジャイル開発Wordテンプレート環境構築重複チェック内製化コンサルティングネタ切れ 対策システムカスタマイザーER図Angular MaterialVSCodePCForAll複数の添付ファイルセキュリティグループSharePoint Online異動コンテナ簡易在庫管理ローコード開発ビジネスルールアクセス許可Artisanスライドショーデザイン拡張コミュニケーションサイトカスタムコネクタ準委任契約業務自動化カスタムコンポーネントGUIDITサポートAI ブログ 活用Connection Reference入門編データ構造.Net Core Test ExplorerレスポンシブUpdateContext承認フロー送信元リストLoopショートカットキー時間外非エンジニアDataverseSharePoint Framework転職Slide showMicrosoft365サイトの種類OpenAPI請負契約効率化Power Platform CLI業務キー月額定額PV数 増やす共同所有者1行テキストモデル駆動型アプリSortByColumns関数Dataverse for TeamsDynamics 365ロードマップフォームメールの送信非表示Microsoftshortcut key通知体験談JavaScriptSPFx主キー比較移行要件定義MCPサーバー総合評価型入札資料作成開発手順複合キー委任問題権限トラブル主要な所有者複数行テキストPower AppsTypeScriptitem関数入門技術form差出人アプリdesignconcat関数ファイル勉強表示サンプルCopilot Studio社内ポータル多言語化サイト構成FAQエージェントデジタルトランスフォーメーション初心者向け拡張機能データ整合性Delegationアクセス権限環境変数選択肢Power PlatformHTMLGoogle Maps初心者Itエクスポートインスタントクラウドフロー[市民開発者JSON文字制限フィルター クエリ内製化切替samplePowerAppsグループウェアMUI権限設計AIチャットボットプロポーザル方式ハウツービルドデータベース設計サブスクリプション型支援ファイルパスクラシック画面日付
PageTop
ページトップに戻る