Asp.Net でのユニット テスト: 完全なチュートリアル

⚡ スマートサマリー

Visual Studio で ASP.NET アプリケーションの単体テストを行うには、まず単体テスト プロジェクトを作成し、ターゲット プロジェクトへの参照を配線し、MSTest の [TestClass] および [TestMethod] 属性を追加し、Assert メソッドを呼び出してクラスが設計どおりに動作することを確認します。

  • 🧪 テストプロジェクト: ASP.NETソリューションに単体テストプロジェクトを追加し、検証対象のプロジェクトを参照します。
  • 🏷️ 属性: MSTestがそれらを検出できるように、クラスには[TestClass]、各テストには[TestMethod]というマークを付けてください。
  • アサーション: Assert.AreEqual、Assert.IsTrue、および同様の呼び出しを使用して、各テストの期待される結果を宣言します。
  • テストを実行: Visual Studio 内の [テストの実行] メニューで [すべてのテストの実行] を選択し、テストエクスプローラーで合格/不合格の結果を確認します。
  • <XNUMXxEXNUMX><XNUMXxEXNUMX><XNUMXxXNUMXA><XNUMXxXNUMX><XNUMXxXNUMXA>️️ フレームワークの選択: MSTest、NUnit、xUnitはすべてdotnet testと連携して動作します。MSTestはデフォルトで同梱されていますが、ASP.NET CoreではxUnitが推奨されます。
  • 🛠️ ベストプラクティス: ユニットを分離し、Arrange Act Assert の手順に従い、すべてのコミットで実行されるようにスイート全体を高速に保ちます。

ASP.NETにおける単体テスト

テストはあらゆるプログラミング言語にとって不可欠な要素です。 テスト ASP.NETアプリケーションの場合、Visual Studioを使用すれば可能です。

Visual Studioはテストコードを作成するために使用されます。また、ASP.NETアプリケーションのテストコードを実行するためにも使用されます。これにより、ASP.NETアプリケーションのエラーを簡単にチェックできます。Visual Studioにはテストモジュールが標準機能として搭載されているため、ASP.NETプロジェクトのテストをすぐに実行できます。

ASP.NETのテスト入門

ASP.NETプロジェクトのテストの最初の段階は、ユニットレベルテストです。このテストは、アプリケーションの機能そのものを検証するものです。テストは、アプリケーションが期待どおりに動作することを確認するために実施されます。ASP.NETでは、まずVisual Studioでテストプロジェクトを作成します。テストプロジェクトには、アプリケーションをテストするために必要なコードが含まれます。

以下のウェブページを見てみましょう。このページには「Guru「99 – ASP.NET」と表示されました。では、ASP.NET プロジェクトの実行時に正しいメッセージが表示されることをどのように確認すればよいでしょうか。これは、ASP.NET ソリューション (Web ベースのアプリケーション開発に使用) にテスト プロジェクトを追加することで実現できます。このテスト プロジェクトによって、ユーザーに正しいメッセージが表示されることが保証されます。

ASP.NETのテスト入門

それでは、さらに詳しく見ていき、ASP.NETでのテストの進め方について解説しましょう。

.NET単体テストプロジェクトの作成

テスト プロジェクトを作成する前に、以下の大まかな手順を実行する必要があります。

  1. 前のセクションで使用した「DemoApplication」を使用します。 これはテストする必要があるアプリケーションになります。
  2. DemoApplication に新しいクラスを追加します。このクラスには「Guru99 – ASP.NET。この文字列は、当社のテストプロジェクトでテストされます。
  3. 最後に、テストプロジェクトを作成します。これは、ASP.NETアプリケーションをテストするために使用されます。

それでは、上記の大まかな手順に従って、テストの実装方法を見ていきましょう。

ステップ1) Visual Studio で DemoApplication が開いていることを確認します。

ステップ2) それでは、DemoApplication に新しいクラスを追加しましょう。このクラスには、' という名前の文字列が含まれます。Guru99 – ASP.NET。この文字列は、当社のテストプロジェクトでテストされます。

新しいクラスを追加するには、以下の手順に従ってください。

.NET単体テストプロジェクトの作成

  1. Visual Studio のソリューション エクスプローラーで、「DemoApplication」を右クリックします。
  2. コンテキスト メニューから [追加] -> [クラス] オプションを選択します。

ステップ3) このステップでは、

.NET単体テストプロジェクトの作成

  1. 新しいクラスに「Tutorial.cs」という名前を付けます。
  2. 「追加」ボタンをクリックしてファイルを DemoApplication に追加します。

これで、新しいクラスがファイル「DemoApplication」に追加されました。

ステップ4) 「DemoApplication」から新しい Tutorial.cs ファイルを開きます。文字列「Guru99 – ASP.NET。

ファイルを開くには、ソリューション エクスプローラーで Tutorial.cs ファイルをダブルクリックします。

.NET単体テストプロジェクトの作成

ファイルには、デフォルトのコードがすでに書き込まれています。 このコードについては気にせず、次のコード行を追加するだけです。

.NET単体テストプロジェクトの作成

namespace DemoApplication
{
  public class Tutorial
  {
     public String Name;
     public Tutorial()
     {
        Name = "Guru99 - ASP.Net";
     }
  }
}

Code 説明:-

  1. Name 変数は文字列型です。
  2. 最後に、Tutorial クラスのコンストラクタで、Name 変数に値を代入します。値は「Guru99 – ASP.NET

ステップ5) 次に demo.aspx ファイルを開き、テキスト「Guru99 – ASP.NET。

.NET単体テストプロジェクトの作成

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
    <body>
    <form id="form1" runat="server">
    <div>
        <% DemoApplication.Tutorial tp=new DemoApplication.Tutorial();%>
        <%=tp.Name%>
    </div>
    </form>
    </body>
</html>

Code 説明:-

  1. 最初の行は、クラス「Tutorial」のオブジェクトを作成します。これは、クラスとオブジェクトを扱う際の最初のステップです。オブジェクトには「tp」という名前が付けられます。
  2. 最後に、demo.aspx ファイルから「tutorial.cs」を呼び出します。 Name 変数の値が表示されます。

上記のプログラムを Visual Studio で実行すると、次の出力が得られます。

出力:-

.NET単体テストプロジェクトの作成

出力から、次のメッセージが表示されます。Guru99 – ASP.NET」と表示されました。

ステップ6) それでは、テストプロジェクトをデモアプリケーションに追加しましょう。これはVisual Studioを使って行います。

.NET単体テストプロジェクトの作成

  1. ソリューション – DemoApplication を右クリックします。
  2. コンテキスト メニューで、[新しいプロジェクト] オプションを選択します。

ステップ7) このステップには、単体テスト プロジェクトをデモ アプリケーションに追加することが含まれます。

.NET単体テストプロジェクトの作成

  1. 左側のパネルで項目タイプ「テスト」をクリックします。
  2. ダイアログ ボックスの中央部分に表示されるリストから、「ユニット テスト プロジェクト」項目を選択します。
  3. テスト プロジェクトの名前を付けます。 この場合、指定された名前は「DemoTest」です。
  4. 最後に「OK」ボタンをクリックします。

最終的に、DemoTest プロジェクトがソリューション エクスプローラーに追加されたことがわかります。 これにより、UnitTest1.cs やプロパティなどの他のファイルもデフォルトで生成されることがわかります。

.NET単体テストプロジェクトの作成

テストプロジェクトの実行

前のセクションで作成したテストプロジェクトは、ASP.NETアプリケーションのテストに使用されます。以下の手順では、テストプロジェクトを実行する方法を見ていきます。

  • 最初のステップは、ASP.NETプロジェクトへの参照を追加することです。このステップは、テストプロジェクトがASP.NETプロジェクトにアクセスできるようにするために実行されます。
  • 次に、テストコードを記述します。
  • 最後に、Visual Studio を使用してテストを実行します。

ステップ1) デモ アプリケーションをテストするには、最初のテスト プロジェクトがデモ アプリケーションを参照する必要があります。 Demo.aspx ソリューションへの参照を追加します。

.NET テスト プロジェクトの実行

  1. デモ テスト プロジェクトを右クリックします
  2. メニューから「追加」->「参照」のオプションを選択します。

ステップ2) 次のステップでは、DemoApplication への参照を追加します。

.NET テスト プロジェクトの実行

  1. ダイアログボックスの左側からプロジェクトオプションを選択します。
  2. DemoApplicationの横にあるチェックボックスをクリックします
  3. 「OK」ボタンをクリックします。

これにより、demotest プロジェクトで DemoApplication をテストできるようになります。

ステップ3) それでは、テストコードをテストプロジェクトに追加しましょう。

  • まず、ソリューション エクスプローラーで UnitTest1 (UnitTest1 ファイルは、テスト プロジェクトの作成時に Visual Studio によって自動的に追加されます) ファイルをダブルクリックします。
  • これは、ASP.NETプロジェクトをテストするために実行されるファイルです。

.NET テスト プロジェクトの実行

UnitTest1.cs ファイルに Visual Studio によって追加された以下のコードが表示されます。これは、テスト プロジェクトを実行するために必要な基本コードです。

.NET テスト プロジェクトの実行

ステップ4) 次のステップは、文字列をテストするために使用されるコードを追加することです。Guru99 – ASP.NET。

.NET テスト プロジェクトの実行

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using DemoApplication;

namespace DemoTest
{
 [TestClass]
 public class UnitTest1
 {
   [TestMethod]
   public void TestMethod1()
   {
      Tutorial tp = new Tutorial();
      Assert.AreEqual(tp.Name,"Guru99 - ASP.Net");
   }
 }
}
  1. タイプ「tp」の新しいオブジェクトを作成します。 チュートリアル
  2. Assert.AreEqual メソッドは、.NET で値が何かと等しいかどうかをテストするために使用されます。したがって、この例では、tp.Name の値と Guru99 – ASP.NET。

ステップ5) それでは、テストプロジェクトを実行してみましょう。そのためには、メニューオプションの「テスト」→「実行」→「すべてのテスト」を選択してください。

.NET テスト プロジェクトの実行

出力:-

.NET テスト プロジェクトの実行

Visual Studio にテスト エクスプローラー ウィンドウが表示されます。ここに上記の結果が表示され、Visual Studio でテストが正常に実行されたことが示されます。

MSTestで使用する属性とアサーション

その Microsoft.VisualStudio.TestTools.UnitTesting 名前空間には、ほとんどの ASP.NET 単体テストを網羅する少数の属性とアサーションが用意されています。これらを最初に習得することで、以降のすべてのテストの可読性と保守性が向上します。

  • [テストクラス] – この属性は、クラスをテストのコンテナとしてマークします。MSTest は、検出時にこの属性を持つクラスをスキャンします。
  • [テスト方法] – は、公開されている引数なしのメソッドを個別のテストとしてマークします。このメソッドは、void、Task、またはValueTaskを返します。
  • [テスト初期化] / [テストクリーンアップ] 各テストメソッドの前後で実行します。これらを使用して、モックリポジトリやインメモリコンテキストなどの共有設定を作成および破棄します。
  • [ClassInitialize] / [ClassCleanup] – クラス全体に対して一度だけ実行します。これは、例えばテストデータベースの初期データを作成するなど、セットアップにコストがかかる場合に便利です。
  • [データ行]と[データテスト方法] パラメータ化された入力を提供することで、単一のテスト方法で複数のケースに対応できるようにする。

各テストメソッド内では、Assert クラスが結果をチェックします。よく使用される呼び出しには、値の比較には Assert.AreEqual、ブール値には Assert.IsTrue と Assert.IsFalse、参照には Assert.IsNull と Assert.IsNotNull、予期される例外には Assert.ThrowsException があります。セットアップ、呼び出し、検証が視覚的に分離されるように、すべてのテストを Arrange、Act、Assert パターンを使用して構成します。このレイアウトにより、失敗したテストのデバッグが容易になります。なぜなら、失敗した行はほとんどの場合、一番下の単一の Assert だからです。

ASP.NETにおけるMSTest、NUnit、およびxUnitの比較

.NETエコシステムでは、3つのテストフレームワークが主流を占めている。いずれもVisual Studio内で動作し、dotnet testと統合されているため、違いは主にスタイル、コミュニティサポート、およびデフォルトの動作にある。

  • MSテスト – 発送元 Microsoft また、このチュートリアルで先に使用した Visual Studio 単体テスト プロジェクト テンプレートがプリインストールされています。これは、チームが単体テストを初めて行う場合に最も安全なデフォルトです。 Microsoft スタック。
  • Nユニット – 3つの中で最も古く、元々は JUnit豊富な制約モデル、TestCaseおよびTestCaseSourceによるパラメータ化されたテスト、そしてあらゆる.NETバージョンにおける成熟したサポートを提供します。
  • xUnit.net – ASP.NET Core および Entity Framework Core チームの内部で使用されています。SetUp メソッドをコンストラクターと IDisposable に置き換え、動作ごとに 1 つのテスト クラスを推奨し、[TestMethod] の代わりに [Fact] と [Theory] ​​を使用します。

これら3つのフレームワークはすべて、属性を通じてテストを検出し、dotnet testコマンドで実行し、次のようなCIパイプラインが使用できるtrxまたはxUnit XMLレポートを生成します。 Azure DevOps、GitHub Actions、そして Jenkins 直接利用できます。初めてのASP.NETプロジェクトでは、MSTestを使用することでツールチェーンをシンプルに保つことができます。より高度なパラメータ設定を必要とするチームや、既にASP.NET Coreを使用しているチームは、構築に使用したフレームワークとの一貫性を保つためにxUnitを選択することがよくあります。

ASP.NETアプリケーションの単体テストに関するベストプラクティス

一連の簡単な習慣に従うことで、ASP.NETプロジェクトのライフサイクル全体を通して、スイートを高速で信頼性が高く、かつ有用な状態に保つことができます。

  1. 各メソッドにつき、1つの動作をテストする。 複数の無関係な事柄を主張するテストは、多くの理由で失敗し、修正に時間がかかる。
  2. テスト名は意図に基づいて命名する。 MethodUnderTest_Scenario_ExpectedResult のようなパターンを使用すると、テストエクスプローラの出力がクラスの読みやすい仕様になります。
  3. 当該ユニットを外部システムから隔離してください。 ファイル、ネットワーク、データベースへの呼び出しをインターフェースでラップし、偽物やモックに置き換えることで、テストが実際の依存関係にアクセスしないようにします。
  4. テストは迅速に行う。 ユニットテストスイート全体が数秒で完了することを目指しましょう。実行時間の長いテストはスキップされ、スキップされたテストは回帰バグを隠蔽します。
  5. 「準備、実行、主張」のレイアウトに従ってください。 空白行を挟んだ3つの短いブロックは、意図を示すとともに、失敗した行を容易に見つけられるようにする。
  6. コミットごとにテストを実行する。 dotnet test を CI パイプラインに組み込むことで、テストが失敗した場合に出荷ではなくマージをブロックするようにします。ping 生産へ。
  7. Trackコードカバレッジは重要ですが、それを追い求める必要はありません。 掲載情報は未検証の経路を浮き彫りにするが、掲載数が多いだけでは品質を保証するものではない。 Rev欠落している行が実際に何をしているのかを確認してください。

これらの手法を組み合わせることで、上記で構築した DemoTest プロジェクトは、プッシュのたびに回帰バグを検出し、将来の開発者のために動作を文書化し、ASP.NET アプリケーションのリファクタリング時に自信を与えてくれるスイートの種となります。

よくあるご質問

はい。GitHub Copilotは、[TestClass]および[TestMethod]ブロックのひな形を作成し、Arrange Act Assertレイアウトを提案し、ターゲットメソッドのシグネチャからパラメータ化された[DataRow]ケースを生成できます。 Rev生成されたアサーションを本番環境で使用する前に、必ず確認してください。

はい。機械学習ベースのアシスタントは、脆弱なテストを特定したり、より適切な名前を提案したり、[TestInitialize] に含めるべき重複した設定をハイライト表示したりできます。レビュー時間を短縮できますが、各アサートの正しさについては開発者が責任を負います。

単体テストは、1つのクラスまたはメソッドを分離し、その依存関係をモック化します。統合テストは、複数のコンポーネントを同時に実行し、多くの場合、実際のデータベースやWebサーバーにアクセスします。単体テストはミリ秒単位で実行されますが、統合テストは時間がかかりますが、配線上のバグを検出できます。

Visual Studio Enterprise では、テスト分析を使用します。 Code すべてのテストをカバーします。他の版では、カバーレットNを追加してください。uGet パッケージを作成して dotnet test –collect:”XPlat” を実行します Code 「報道」を制作する Cobertura XMLレポート。

依存関係をインターフェースでラップし、コンストラクタを通して注入します。テストでは、MoqやNSubstituteなどのライブラリで構築したスタブまたはモックを渡すことで、テスト対象ユニットが実際のデータベースやHTTPエンドポイントにアクセスしないようにします。

テストプロジェクトを含むフォルダで`dotnet test`コマンドを実行してください。このコマンドはプロジェクトをビルドし、すべての`[TestMethod]`を検出し、実行して、概要を出力します。GitHub ActionsなどのCIシステムは、ワークフローのステップ内で同じコマンドを呼び出します。

メソッドに [DataTestMethod] 属性を付け、入力値と期待される結果を指定する [DataRow] 属性を 1 つ以上追加します。すると、MSTest は行ごとに同じテストボディを 1 回実行し、テストエクスプローラーに各ケースごとに個別の行を生成します。

次に必要な動作を記述する、失敗するテストメソッドを作成し、テストが合格するのに十分な本番コードを追加してから、リファクタリングを行います。この赤と緑のリファクタリングループを繰り返すことで、設計がテストによって導かれるようになり、その逆になるのを防ぐことができます。