SignalR Uygulamalarına Birim Testi YapmaUnit Testing SignalR Applications

, Patrick Fleti tarafındanby Patrick Fletcher

Warning

Bu belge, SignalR 'nin en son sürümü için değildir.This documentation isn't for the latest version of SignalR. ASP.NET Core SignalR'ye göz atın.Take a look at ASP.NET Core SignalR.

Bu makalede, SignalR 2 ' nin birim testi özelliklerini kullanma açıklanmaktadır.This article describes using the Unit Testing features of SignalR 2.

Bu konuda kullanılan yazılım sürümleriSoftware versions used in this topic

Sorular ve açıklamalarQuestions and comments

Lütfen bu öğreticiyi nasıl beğentireceğiniz ve sayfanın en altındaki açıklamalarda İyileştiğimiz hakkında geri bildirimde bulunun.Please leave feedback on how you liked this tutorial and what we could improve in the comments at the bottom of the page. Öğreticiyle doğrudan ilgili olmayan sorularınız varsa, bunları ASP.NET SignalR forumuna veya StackOverflow.com'e gönderebilirsiniz.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.

Birim testi SignalR uygulamalarıUnit testing SignalR applications

SignalR uygulamanız için birim testleri oluşturmak için SignalR 2 ' deki birim testi özelliklerini kullanabilirsiniz.You can use the unit test features in SignalR 2 to create unit tests for your SignalR application. SignalR 2, test için hub yöntemlerinizi taklit etmek üzere bir sahte nesne oluşturmak için kullanılabilecek olan IHV Ubcallerconnectioncontext arabirimini içerir.SignalR 2 includes the IHubCallerConnectionContext interface, which can be used to create a mock object to simulate your hub methods for testing.

Bu bölümde, XUnit.net ve moqkullanarak başlangıç öğreticisinde oluşturulan uygulama için birim testleri ekleyeceksiniz.In this section, you'll add unit tests for the application created in the Getting Started tutorial using XUnit.net and Moq.

XUnit.net, testi denetlemek için kullanılacaktır; MOQ, test için bir sahte nesne oluşturmak üzere kullanılacaktır.XUnit.net will be used to control the test; Moq will be used to create a mock object for testing. İsterseniz, diğer sahte işlem çerçeveleri kullanılabilir; Ndeğiştirme de iyi bir seçimdir.Other mocking frameworks can be used if desired; NSubstitute is also a good choice. Bu öğreticide, bir arabirim kullanılarak, bir dynamic nesnesi (.NET Framework 4 ' te tanıtılan) ve ikincisi kullanarak, sahte nesnenin nasıl ayarlanacağı gösterilmektedir.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.

İçindekilerContents

Bu öğretici aşağıdaki bölümleri içerir.This tutorial contains the following sections.

Dinamik ile birim testiUnit testing with Dynamic

Bu bölümde, dinamik bir nesne kullanarak başlangıç öğreticisinde oluşturulan uygulama için bir birim testi ekleyeceksiniz.In this section, you'll add a unit test for the application created in the Getting Started tutorial using a dynamic object.

  1. Visual Studio 2013 için xUnit Çalıştırıcısı uzantısını yükler.Install the XUnit Runner extension for Visual Studio 2013.

  2. Kullanmaya başlama öğreticisiniya da tamamlanmış uygulamayı MSDN kod galerisindenindirin.Either complete the Getting Started tutorial, or download the completed application from MSDN Code Gallery.

  3. Başlarken uygulamasının indirme sürümünü kullanıyorsanız, Paket Yöneticisi konsolu 'nu açın ve geri yükle ' ye tıklayarak SignalR paketini projeye ekleyin.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.

    Paketleri geri yükle

  4. Birim testi için çözüme bir proje ekleyin.Add a project to the solution for the unit test. Çözüm Gezgini çözümünüzde çözümünüze sağ tıklayın ve Ekle, Yeni proje.. . öğesini seçin. C# Düğüm altında Windows düğümünü seçin.Right-click your solution in Solution Explorer and select Add, New Project.... Under the C# node, select the Windows node. Sınıf kitaplığı' nı seçin.Select Class Library. Yeni projeyi Testlibrary olarak adlandırın ve Tamam' a tıklayın.Name the new project TestLibrary and click OK.

    Test kitaplığı oluştur

  5. Test kitaplığı projesine SignalRChat projesine bir başvuru ekleyin.Add a reference in the test library project to the SignalRChat project. Testlibrary projesine sağ tıklayın ve Ekle, başvuru.. . seçeneğini belirleyin. Çözüm düğümü altındaki Projeler düğümünü seçin ve signalrchat' i kontrol edin.Right-click the TestLibrary project and select Add, Reference.... Select the Projects node under the Solution node, and check SignalRChat. Tamam’a tıklayın.Click OK.

    Proje başvurusu Ekle

  6. SignalR, moq ve XUnit paketlerini Testlibrary projesine ekleyin.Add the SignalR, Moq, and XUnit packages to the TestLibrary project. Paket Yöneticisi konsolunda, varsayılan proje açılan menüsünü testlibraryolarak ayarlayın.In the Package Manager Console, set the Default Project dropdown to TestLibrary. Konsol penceresinde aşağıdaki komutları çalıştırın:Run the following commands in the console window:

    • Install-Package Microsoft.AspNet.SignalR

    • Install-Package Moq

    • Install-Package XUnit

      Paketleri yükler

  7. Test dosyasını oluşturun.Create the test file. Testlibrary projesine sağ tıklayın ve Ekle... ' ye tıklayın.Right-click the TestLibrary project and click Add..., Class. Yeni sınıfı Tests.csolarak adlandırın.Name the new class Tests.cs.

  8. Tests.cs içeriğini aşağıdaki kodla değiştirin.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);
            }
        }
    }
    

    Yukarıdaki kodda, bir test istemcisi, IQ kitaplığı 'ndan (SignalR 2,1 ' de tür parametresi için dynamic atayın), moq kitaplığındaki Mock nesnesi kullanılarak oluşturulur. IHubCallerConnectionContext arabirimi, istemcisinde yöntemleri çağırmada kullandığınız ara sunucu nesnesidir.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 işlevi daha sonra, ChatHub sınıfı tarafından çağrılabilmesi için, sahte istemci için tanımlanmıştır.The broadcastMessage function is then defined for the mock client so that it can be called by the ChatHub class. Test motoru daha sonra ChatHub sınıfının Send yöntemini çağırır ve bu da moclenmiş broadcastMessage işlevini çağırır.The test engine then calls the Send method of the ChatHub class, which in turn calls the mocked broadcastMessage function.

  9. F6tuşuna basarak çözümü oluşturun.Build the solution by pressing F6.

  10. Birim testini çalıştırın.Run the unit test. Visual Studio 'da Test, Windows, Test Gezgini' ni seçin.In Visual Studio, select Test, Windows, Test Explorer. Test Gezgini penceresinde, Hubsaremockableviadynamıc öğesine sağ tıklayın ve Seçili Testleri Çalıştır' ı seçin.In the Test Explorer window, right-click HubsAreMockableViaDynamic and select Run Selected Tests.

    Test Gezgini

  11. Testin test Gezgini penceresindeki alt bölmeyi denetleyerek geçtiğini doğrulayın.Verify that the test passed by checking the lower pane in the Test Explorer window. Pencerede testin geçtiğini gösterir.The window will show that the test passed.

    Test geçildi

Türe göre birim testiUnit testing by type

Bu bölümde, test edilecek yöntemi içeren bir arabirimi kullanarak başlangıç öğreticisinde oluşturulan uygulama için bir test ekleyeceksiniz.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. Yukarıdaki dinamik öğreticiyle birim testinde 1-7 arasındaki adımları uygulayın.Complete steps 1-7 in the Unit testing with Dynamic tutorial above.

  2. Tests.cs içeriğini aşağıdaki kodla değiştirin.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();
           }
        }
    }
    

    Yukarıdaki kodda, test altyapısının bir sahte istemci oluşturması için broadcastMessage yönteminin imzasını tanımlayan bir arabirim oluşturulur.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. Daha sonra bir sahte istemci, ıubcallerconnectioncontext türünde Mock nesnesi kullanılarak oluşturulur (signalr 2,1 ' de tür parametresi için dynamic atayın.) IHubCallerConnectionContext arabirimi, istemcisinde yöntemleri çağırmada kullandığınız ara sunucu nesnesidir.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.

    Test daha sonra bir ChatHubörneği oluşturur ve sonra broadcastMessage yönteminin bir sahte sürümünü oluşturur ve bu da hub üzerinde Send yöntemi çağırarak çağrılır.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. F6tuşuna basarak çözümü oluşturun.Build the solution by pressing F6.

  4. Birim testini çalıştırın.Run the unit test. Visual Studio 'da Test, Windows, Test Gezgini' ni seçin.In Visual Studio, select Test, Windows, Test Explorer. Test Gezgini penceresinde, Hubsaremockableviadynamıc öğesine sağ tıklayın ve Seçili Testleri Çalıştır' ı seçin.In the Test Explorer window, right-click HubsAreMockableViaDynamic and select Run Selected Tests.

    Test Gezgini

  5. Testin test Gezgini penceresindeki alt bölmeyi denetleyerek geçtiğini doğrulayın.Verify that the test passed by checking the lower pane in the Test Explorer window. Pencerede testin geçtiğini gösterir.The window will show that the test passed.

    Test geçildi