SignalR アプリケーションの単体テスト
警告
このドキュメントは、SignalR の最新バージョン用ではありません。 SignalR の ASP.NET Coreを見てみましょう。
この記事では、SignalR 2 の単体テスト機能の使用について説明します。
このトピックで使用するソフトウェアのバージョン
- Visual Studio 2013
- .NET 4.5
- SignalR バージョン 2
質問とコメント
このチュートリアルを気に入った方法と、ページの下部にあるコメントで改善できる内容に関するフィードバックをお寄せください。 チュートリアルに直接関連していない質問がある場合は、 ASP.NET SignalR フォーラム または StackOverflow.com に投稿できます。
SignalR アプリケーションの単体テスト
SignalR 2 の単体テスト機能を使用して、SignalR アプリケーションの単体テストを作成できます。 SignalR 2 には IHubCallerConnectionContext インターフェイスが含まれています。これを使用してモック オブジェクトを作成し、テスト用のハブ メソッドをシミュレートできます。
このセクションでは、XUnit.net と Moq を使用して、はじめに チュートリアルで作成したアプリケーションの単体テストを追加します。
XUnit.net は、テストを制御するために使用されます。Moq は、テスト用の モック オブジェクトを作成するために使用されます。 必要に応じて、他のモック フレームワークを使用できます。 N置換 も良い選択です。 このチュートリアルでは、2 つの方法でモック オブジェクトを設定する方法について説明します。1 つ目は、(.NET Framework 4 で導入された) オブジェクトを使用dynamic
する方法と、2 つ目の方法でインターフェイスを使用する方法です。
内容
このチュートリアルには、次のセクションが含まれています。
動的を使用した単体テスト
このセクションでは、動的オブジェクトを使用して、はじめに チュートリアルで作成したアプリケーションの単体テストを追加します。
Visual Studio 2013の XUnit Runner 拡張機能をインストールします。
はじめにチュートリアルを完了するか、MSDN コード ギャラリーから完成したアプリケーションをダウンロードします。
はじめに アプリケーションのダウンロード バージョンを使用している場合は、パッケージ マネージャー コンソールを開き、[復元] をクリックして SignalR パッケージをプロジェクトに追加します。
単体テストのソリューションにプロジェクトを追加します。 ソリューション エクスプローラーでソリューションを右クリックし、[追加]、[新しいプロジェクト]、[...] の順に選択します。[C#] ノードで、Windows ノードを選択します。 [ クラス ライブラリ] を選択します。 新しいプロジェクトに TestLibrary という名前を付け、[OK] をクリック します。
テスト ライブラリ プロジェクトの参照を SignalRChat プロジェクトに追加します。 TestLibrary プロジェクトを右クリックし、[追加]、[参照...] の順に選択します。[ソリューション] ノードの下にある [プロジェクト] ノードを選択し、[SignalRChat] をチェックします。 [OK] をクリックします。
SignalR、Moq、XUnit パッケージを TestLibrary プロジェクトに追加します。 パッケージ マネージャー コンソールで、[既定のプロジェクト] ドロップダウンを [TestLibrary] に設定します。 コンソール ウィンドウで次のコマンドを実行します。
Install-Package Microsoft.AspNet.SignalR
Install-Package Moq
Install-Package XUnit
テスト ファイルを作成します。 TestLibrary プロジェクトを右クリックし、[追加]、[クラス] の順にクリックします。 新しいクラスに Tests.cs という名前を付けます。
Tests.cs の内容を次のコードに置き換えます。
using System; using Xunit; using SignalRChat; using Microsoft.AspNet.SignalR.Hubs; using Moq; using System.Dynamic; namespace TestLibrary { public class Tests { [Fact] public void HubsAreMockableViaDynamic() { bool sendCalled = false; var hub = new ChatHub(); var mockClients = new Mock<IHubCallerConnectionContext<dynamic>>(); hub.Clients = mockClients.Object; dynamic all = new ExpandoObject(); all.broadcastMessage = new Action<string, string>((name, message) => { sendCalled = true; }); mockClients.Setup(m => m.All).Returns((ExpandoObject)all); hub.Send("TestUser", "TestMessage"); Assert.True(sendCalled); } } }
上記のコードでは、テスト クライアントは、IHubCallerConnectionContext 型の Moq ライブラリの オブジェクトを使用して
Mock
作成されます (SignalR 2.1 では、型パラメーターに 代入dynamic
します)。インターフェイスはIHubCallerConnectionContext
、クライアントでメソッドを呼び出すプロキシ オブジェクトです。broadcastMessage
その後、モック クライアントに対して関数が定義され、ChatHub
クラスから呼び出すことができます。 その後、テスト エンジンは クラスの メソッドをChatHub
呼び出Send
し、モック関数broadcastMessage
を呼び出します。F6 キーを押してソリューションをビルドします。
単体テストを実行します。 Visual Studio で、[テスト]、[Windows]、[テスト エクスプローラー] を選択します。 [テスト エクスプローラー] ウィンドウで、[HubsAreMockableViaDynamic] を右クリックし、[選択したテストの実行] を選択します。
[テスト エクスプローラー] ウィンドウの下のペインを確認して、テストが成功したことを確認します。 ウィンドウに、テストが成功したことを示すメッセージが表示されます。
種類別の単体テスト
このセクションでは、テストするメソッドを含むインターフェイスを使用して、はじめに チュートリアルで作成したアプリケーションのテストを追加します。
上記の「動的を使用した 単体テスト 」チュートリアルの手順 1 から 7 を完了します。
Tests.cs の内容を次のコードに置き換えます。
using Xunit; using SignalRChat; using Microsoft.AspNet.SignalR.Hubs; using Moq; namespace TestLibrary { public class Tests { public interface IClientContract { void broadcastMessage(string name, string message); } [Fact] public void HubsAreMockableViaType() { var hub = new ChatHub(); var mockClients = new Mock<IHubCallerConnectionContext<dynamic>>(); var all = new Mock<IClientContract>(); hub.Clients = mockClients.Object; all.Setup(m => m.broadcastMessage(It.IsAny<string>(), It.IsAny<string>())).Verifiable(); mockClients.Setup(m => m.All).Returns(all.Object); hub.Send("TestUser", "TestMessage"); all.VerifyAll(); } } }
上記のコードでは、テスト エンジンがモック クライアントを作成するメソッドの
broadcastMessage
シグネチャを定義するインターフェイスが作成されます。 その後、IHubCallerConnectionContext 型の オブジェクトをMock
使用してモック クライアントが作成されます (SignalR 2.1 では、型パラメーターに 割り当てますdynamic
)。インターフェイスはIHubCallerConnectionContext
、クライアントでメソッドを呼び出すプロキシ オブジェクトです。次に、テストによって の
ChatHub
インスタンスが作成され、 メソッドのbroadcastMessage
モック バージョンが作成されます。その後、ハブで メソッドをSend
呼び出すことによって呼び出されます。F6 キーを押してソリューションをビルドします。
単体テストを実行します。 Visual Studio で、[テスト]、[Windows]、[テスト エクスプローラー] を選択します。 [テスト エクスプローラー] ウィンドウで、[HubsAreMockableViaDynamic] を右クリックし、[選択したテストの実行] を選択します。
[テスト エクスプローラー] ウィンドウの下のペインを確認して、テストが成功したことを確認します。 ウィンドウに、テストが成功したことを示すメッセージが表示されます。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示