Asp.Net でのユニット テスト: 完全なチュートリアル
⚡ スマートサマリー
Visual Studio で ASP.NET アプリケーションの単体テストを行うには、まず単体テスト プロジェクトを作成し、ターゲット プロジェクトへの参照を配線し、MSTest の [TestClass] および [TestMethod] 属性を追加し、Assert メソッドを呼び出してクラスが設計どおりに動作することを確認します。
テストはあらゆるプログラミング言語にとって不可欠な要素です。 テスト 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でのテストの進め方について解説しましょう。
.NET単体テストプロジェクトの作成
テスト プロジェクトを作成する前に、以下の大まかな手順を実行する必要があります。
- 前のセクションで使用した「DemoApplication」を使用します。 これはテストする必要があるアプリケーションになります。
- DemoApplication に新しいクラスを追加します。このクラスには「Guru99 – ASP.NET。この文字列は、当社のテストプロジェクトでテストされます。
- 最後に、テストプロジェクトを作成します。これは、ASP.NETアプリケーションをテストするために使用されます。
それでは、上記の大まかな手順に従って、テストの実装方法を見ていきましょう。
ステップ1) Visual Studio で DemoApplication が開いていることを確認します。
ステップ2) それでは、DemoApplication に新しいクラスを追加しましょう。このクラスには、' という名前の文字列が含まれます。Guru99 – ASP.NET。この文字列は、当社のテストプロジェクトでテストされます。
新しいクラスを追加するには、以下の手順に従ってください。
- Visual Studio のソリューション エクスプローラーで、「DemoApplication」を右クリックします。
- コンテキスト メニューから [追加] -> [クラス] オプションを選択します。
ステップ3) このステップでは、
- 新しいクラスに「Tutorial.cs」という名前を付けます。
- 「追加」ボタンをクリックしてファイルを DemoApplication に追加します。
これで、新しいクラスがファイル「DemoApplication」に追加されました。
ステップ4) 「DemoApplication」から新しい Tutorial.cs ファイルを開きます。文字列「Guru99 – ASP.NET。
ファイルを開くには、ソリューション エクスプローラーで Tutorial.cs ファイルをダブルクリックします。
ファイルには、デフォルトのコードがすでに書き込まれています。 このコードについては気にせず、次のコード行を追加するだけです。
namespace DemoApplication { public class Tutorial { public String Name; public Tutorial() { Name = "Guru99 - ASP.Net"; } } }
Code 説明:-
- Name 変数は文字列型です。
- 最後に、Tutorial クラスのコンストラクタで、Name 変数に値を代入します。値は「Guru99 – ASP.NET
ステップ5) 次に demo.aspx ファイルを開き、テキスト「Guru99 – ASP.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 説明:-
- 最初の行は、クラス「Tutorial」のオブジェクトを作成します。これは、クラスとオブジェクトを扱う際の最初のステップです。オブジェクトには「tp」という名前が付けられます。
- 最後に、demo.aspx ファイルから「tutorial.cs」を呼び出します。 Name 変数の値が表示されます。
上記のプログラムを Visual Studio で実行すると、次の出力が得られます。
出力:-
出力から、次のメッセージが表示されます。Guru99 – ASP.NET」と表示されました。
ステップ6) それでは、テストプロジェクトをデモアプリケーションに追加しましょう。これはVisual Studioを使って行います。
- ソリューション – DemoApplication を右クリックします。
- コンテキスト メニューで、[新しいプロジェクト] オプションを選択します。
ステップ7) このステップには、単体テスト プロジェクトをデモ アプリケーションに追加することが含まれます。
- 左側のパネルで項目タイプ「テスト」をクリックします。
- ダイアログ ボックスの中央部分に表示されるリストから、「ユニット テスト プロジェクト」項目を選択します。
- テスト プロジェクトの名前を付けます。 この場合、指定された名前は「DemoTest」です。
- 最後に「OK」ボタンをクリックします。
最終的に、DemoTest プロジェクトがソリューション エクスプローラーに追加されたことがわかります。 これにより、UnitTest1.cs やプロパティなどの他のファイルもデフォルトで生成されることがわかります。
テストプロジェクトの実行
前のセクションで作成したテストプロジェクトは、ASP.NETアプリケーションのテストに使用されます。以下の手順では、テストプロジェクトを実行する方法を見ていきます。
- 最初のステップは、ASP.NETプロジェクトへの参照を追加することです。このステップは、テストプロジェクトがASP.NETプロジェクトにアクセスできるようにするために実行されます。
- 次に、テストコードを記述します。
- 最後に、Visual Studio を使用してテストを実行します。
ステップ1) デモ アプリケーションをテストするには、最初のテスト プロジェクトがデモ アプリケーションを参照する必要があります。 Demo.aspx ソリューションへの参照を追加します。
- デモ テスト プロジェクトを右クリックします
- メニューから「追加」->「参照」のオプションを選択します。
ステップ2) 次のステップでは、DemoApplication への参照を追加します。
- ダイアログボックスの左側からプロジェクトオプションを選択します。
- DemoApplicationの横にあるチェックボックスをクリックします
- 「OK」ボタンをクリックします。
これにより、demotest プロジェクトで DemoApplication をテストできるようになります。
ステップ3) それでは、テストコードをテストプロジェクトに追加しましょう。
- まず、ソリューション エクスプローラーで UnitTest1 (UnitTest1 ファイルは、テスト プロジェクトの作成時に Visual Studio によって自動的に追加されます) ファイルをダブルクリックします。
- これは、ASP.NETプロジェクトをテストするために実行されるファイルです。
UnitTest1.cs ファイルに Visual Studio によって追加された以下のコードが表示されます。これは、テスト プロジェクトを実行するために必要な基本コードです。
ステップ4) 次のステップは、文字列をテストするために使用されるコードを追加することです。Guru99 – ASP.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"); } } }
- タイプ「tp」の新しいオブジェクトを作成します。 チュートリアル
- Assert.AreEqual メソッドは、.NET で値が何かと等しいかどうかをテストするために使用されます。したがって、この例では、tp.Name の値と Guru99 – ASP.NET。
ステップ5) それでは、テストプロジェクトを実行してみましょう。そのためには、メニューオプションの「テスト」→「実行」→「すべてのテスト」を選択してください。
出力:-
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つの動作をテストする。 複数の無関係な事柄を主張するテストは、多くの理由で失敗し、修正に時間がかかる。
- テスト名は意図に基づいて命名する。 MethodUnderTest_Scenario_ExpectedResult のようなパターンを使用すると、テストエクスプローラの出力がクラスの読みやすい仕様になります。
- 当該ユニットを外部システムから隔離してください。 ファイル、ネットワーク、データベースへの呼び出しをインターフェースでラップし、偽物やモックに置き換えることで、テストが実際の依存関係にアクセスしないようにします。
- テストは迅速に行う。 ユニットテストスイート全体が数秒で完了することを目指しましょう。実行時間の長いテストはスキップされ、スキップされたテストは回帰バグを隠蔽します。
- 「準備、実行、主張」のレイアウトに従ってください。 空白行を挟んだ3つの短いブロックは、意図を示すとともに、失敗した行を容易に見つけられるようにする。
- コミットごとにテストを実行する。 dotnet test を CI パイプラインに組み込むことで、テストが失敗した場合に出荷ではなくマージをブロックするようにします。ping 生産へ。
- Trackコードカバレッジは重要ですが、それを追い求める必要はありません。 掲載情報は未検証の経路を浮き彫りにするが、掲載数が多いだけでは品質を保証するものではない。 Rev欠落している行が実際に何をしているのかを確認してください。
これらの手法を組み合わせることで、上記で構築した DemoTest プロジェクトは、プッシュのたびに回帰バグを検出し、将来の開発者のために動作を文書化し、ASP.NET アプリケーションのリファクタリング時に自信を与えてくれるスイートの種となります。


















