SignalR アプリケーションの単体テストUnit Testing SignalR Applications

提供者: Patrick Fletcherby Patrick Fletcher

Note

この記事では、ASP.NET SignalR を指します。This article refers to ASP.NET SignalR. SignalR を使用して、Java、Node.js、またはサーバーレス シナリオでは、リアルタイムのシナリオを有効にする方法と思う場合を見てASP.NET Core SignalRします。If you're thinking about using SignalR to enable real-time scenarios with Java, Node.js, or in a serverless scenario, take a look at ASP.NET Core SignalR. 既に ASP.NET SignalR を使用した場合を見て、のバージョンの違いバージョンの違いと ASP.NET Core SignalR での機能強化を理解するページ。If you've already used ASP.NET SignalR, take a look at the version differences page to understand the differences in the versions and the improvements in ASP.NET Core SignalR. 最後に、Microsoft Azure でリアルタイム アプリを実行することがわかっている場合を見て、 Azure SignalR サービスなど、アプリを必要とすると、クラウド ベースのスケール アウトを提供します。Finally, if you know you'll be running your real-time apps in Microsoft Azure, take a look at the Azure SignalR Service, as it provides cloud-based scale-out once your apps need it.

この記事では、SignalR 2 の単体テスト機能を使用して説明します。This article describes using the Unit Testing features of SignalR 2.

このトピックで使用されるソフトウェアのバージョンSoftware versions used in this topic

意見やご質問Questions and comments

このチュートリアルの良い点に関するフィードバックや、ページ下部にあるコメントで改善できる点をお知らせください。Please leave feedback on how you liked this tutorial and what we could improve in the comments at the bottom of the page. チュートリアルに直接関係のない質問がある場合は、ASP.NET SignalR フォーラムまたはStackOverflow.comにて投稿してください。If you have questions that are not directly related to the tutorial, you can post them to the ASP.NET SignalR forum or StackOverflow.com.

SignalR アプリケーションの単体テストUnit testing SignalR applications

SignalR 2 の単体テストの機能を使用すると、SignalR アプリケーションの単体テストを作成します。You can use the unit test features in SignalR 2 to create unit tests for your SignalR application. SignalR 2 が含まれています、 IHubCallerConnectionContextインターフェイスで、テストのハブ メソッドをシミュレートするモック オブジェクトを作成するために使用できます。SignalR 2 includes the IHubCallerConnectionContext interface, which can be used to create a mock object to simulate your hub methods for testing.

このセクションで作成したアプリケーションの単体テストを追加します、チュートリアル入門を使用してXUnit.netMoqします。In this section, you'll add unit tests for the application created in the Getting Started tutorial using XUnit.net and Moq.

XUnit.net; テストの制御に使用します。Moq の作成に使用される、モックをテストするためのオブジェクト。XUnit.net will be used to control the test; Moq will be used to create a mock object for testing. 必要な場合、その他のモック作成フレームワークを使用できます。NSubstituteもをお勧めします。Other mocking frameworks can be used if desired; NSubstitute is also a good choice. このチュートリアルでは、2 つの方法でモック オブジェクトを設定する方法を示します。最初を使用して、dynamicオブジェクト (.NET Framework 4 で導入された、)、第 2、インターフェイスを使用します。This tutorial demonstrates how to set up the mock object in two ways: First, using a dynamic object (introduced in .NET Framework 4), and second, using an interface.

目次Contents

このチュートリアルには、次のセクションが含まれています。This tutorial contains the following sections.

動的を使用した単体テストUnit testing with Dynamic

このセクションで作成したアプリケーションの単体テストを追加します、チュートリアル入門動的オブジェクトを使用します。In this section, you'll add a unit test for the application created in the Getting Started tutorial using a dynamic object.

  1. インストール、 XUnit ランナー拡張子for Visual Studio 2013。Install the XUnit Runner extension for Visual Studio 2013.

  2. 完了するか、チュートリアル入門、完成したアプリケーションをダウンロードまたはMSDN コード ギャラリーします。Either complete the Getting Started tutorial, or download the completed application from MSDN Code Gallery.

  3. 作業の開始のアプリケーションのダウンロード版を使用している場合は開きますパッケージ マネージャー コンソールクリック復元SignalR パッケージをプロジェクトに追加します。If you are using the download version of the Getting Started application, open Package Manager Console and click Restore to add the SignalR package to the project.

    パッケージを復元します。

  4. 単体テストのソリューションにプロジェクトを追加します。Add a project to the solution for the unit test. ソリューションを右クリックしてソリューション エクスプ ローラー選択追加新しいプロジェクト..で、 c# ノードを選択、 Windowsノード。Right-click your solution in Solution Explorer and select Add, New Project.... Under the C# node, select the Windows node. 選択クラス ライブラリします。Select Class Library. 新しいプロジェクトの名前TestLibraryクリックOKName the new project TestLibrary and click OK.

    テスト ライブラリを作成します。

  5. SignalRChat プロジェクトに、テスト ライブラリ プロジェクトでの参照を追加します。Add a reference in the test library project to the SignalRChat project. 右クリックし、 TestLibrary順に選択して追加参照..選択、プロジェクトノードの下、ソリューションノード、およびチェックSignalRChatします。Right-click the TestLibrary project and select Add, Reference.... Select the Projects node under the Solution node, and check SignalRChat. [OK] をクリックします。Click OK.

    プロジェクト参照を追加します。

  6. SignalR、Moq、および XUnit パッケージを追加、 TestLibraryプロジェクト。Add the SignalR, Moq, and XUnit packages to the TestLibrary project. パッケージ マネージャー コンソール、設定、プロジェクトの既定のドロップダウンを使用してTestLibraryします。In the Package Manager Console, set the Default Project dropdown to TestLibrary. コンソール ウィンドウで、次のコマンドを実行します。Run the following commands in the console window:

    • Install-Package Microsoft.AspNet.SignalR

    • Install-Package Moq

    • Install-Package XUnit

      パッケージをインストールします。

  7. テスト ファイルを作成します。Create the test file. 右クリックし、 TestLibraryプロジェクトし、クリックして追加しています.クラスします。Right-click the TestLibrary project and click Add..., Class. 新しいクラスの名前Tests.csします。Name the new class Tests.cs.

  8. Tests.cs の内容を次のコードに置き換えます。Replace the contents of Tests.cs with the following code.

    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);
            }
        }
    }
    

    使用して、テスト用クライアントを作成、上記のコードで、Mockオブジェクトから、 Moq型のライブラリ、 IHubCallerConnectionContext (SignalR 2.1 を割り当ててdynamic型パラメーター。)IHubCallerConnectionContextインターフェイスは、クライアントのメソッドを呼び出すが、プロキシ オブジェクト。In the code above, a test client is created using the Mock object from the Moq library, of type IHubCallerConnectionContext (in SignalR 2.1, assign dynamic for the type parameter.) The IHubCallerConnectionContext interface is the proxy object with which you invoke methods on the client. broadcastMessage呼び出すことができるように、モックのクライアントの関数が定義し、ChatHubクラス。The broadcastMessage function is then defined for the mock client so that it can be called by the ChatHub class. テスト エンジンを呼び出して、Sendのメソッド、ChatHubクラスで、さらに、モックを呼び出すbroadcastMessage関数。The test engine then calls the Send method of the ChatHub class, which in turn calls the mocked broadcastMessage function.

  9. キーを押して、ソリューションをビルドF6します。Build the solution by pressing F6.

  10. 単体テストを実行します。Run the unit test. Visual Studio で、次のように選択します。テストWindowsテスト エクスプ ローラーします。In Visual Studio, select Test, Windows, Test Explorer. テスト エクスプ ローラー ウィンドウで右クリックHubsAreMockableViaDynamic選択選択したテストの実行します。In the Test Explorer window, right-click HubsAreMockableViaDynamic and select Run Selected Tests.

    Test Explorer

  11. テスト エクスプ ローラー ウィンドウで、下部のウィンドウをチェックして、テストが渡されることを確認します。Verify that the test passed by checking the lower pane in the Test Explorer window. テストが成功した、ウィンドウが表示されます。The window will show that the test passed.

    テスト成功

種類による単体テストUnit testing by type

このセクションで作成したアプリケーションのテストを追加します、チュートリアル入門をテストするメソッドを含むインターフェイスを使用します。In this section, you'll add a test for the application created in the Getting Started tutorial using an interface that contains the method to be tested.

  1. 手順 1. ~ 7. を完了、単体テストの動的な上記のチュートリアル。Complete steps 1-7 in the Unit testing with Dynamic tutorial above.

  2. Tests.cs の内容を次のコードに置き換えます。Replace the contents of Tests.cs with the following code.

    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メソッド、テスト エンジンがモックのクライアントを作成します。In the code above, an interface is created defining the signature of the broadcastMessage method for which the test engine will create a mock client. モックのクライアントを使用して作成し、Mock型のオブジェクト、 IHubCallerConnectionContext (SignalR 2.1 を割り当ててdynamic型パラメーターです)。IHubCallerConnectionContextインターフェイスは、クライアントのメソッドを呼び出すが、プロキシ オブジェクト。A mock client is then created using the Mock object, of type IHubCallerConnectionContext (in SignalR 2.1, assign dynamic for the type parameter.) The IHubCallerConnectionContext interface is the proxy object with which you invoke methods on the client.

    インスタンスを作成、テストChatHub、し、モック版を作成、broadcastMessageメソッドを呼び出すことによってさらに呼び出され、Sendハブのメソッド。The test then creates an instance of ChatHub, and then creates a mock version of the broadcastMessage method, which in turn is invoked by calling the Send method on the hub.

  3. キーを押して、ソリューションをビルドF6します。Build the solution by pressing F6.

  4. 単体テストを実行します。Run the unit test. Visual Studio で、次のように選択します。テストWindowsテスト エクスプ ローラーします。In Visual Studio, select Test, Windows, Test Explorer. テスト エクスプ ローラー ウィンドウで右クリックHubsAreMockableViaDynamic選択選択したテストの実行します。In the Test Explorer window, right-click HubsAreMockableViaDynamic and select Run Selected Tests.

    Test Explorer

  5. テスト エクスプ ローラー ウィンドウで、下部のウィンドウをチェックして、テストが渡されることを確認します。Verify that the test passed by checking the lower pane in the Test Explorer window. テストが成功した、ウィンドウが表示されます。The window will show that the test passed.

    テスト成功