Aracılığıyla paylaş


SignalR Uygulamalarına Birim Testi Yapma

Tarafından Patrick Fletcher

Uyarı

Bu belgeler SignalR'nin en son sürümüne yönelik değildir. ASP.NET Core SignalR'ye göz atın.

Bu makalede SignalR 2'nin Birim Testi özelliklerinin kullanımı açıklanmaktadır.

Bu konuda kullanılan yazılım sürümleri

Sorular ve yorumlar

Lütfen bu öğreticiyi nasıl beğendiğiniz ve sayfanın altındaki yorumlarda neleri geliştirebileceğimiz hakkında geri bildirim bırakın. Öğreticiyle doğrudan ilgili olmayan sorularınız varsa bunları ASP.NET SignalR forumunu veya StackOverflow.com gönderebilirsiniz.

SignalR uygulamalarının birim testi

SignalR uygulamanız için birim testleri oluşturmak için SignalR 2'deki birim testi özelliklerini kullanabilirsiniz. SignalR 2, test için hub yöntemlerinizin benzetimini yapmak üzere sahte bir nesne oluşturmak için kullanılabilen IHubCallerConnectionContext arabirimini içerir.

Bu bölümde, XUnit.net ve Moq kullanarak Başlarken öğreticisinde oluşturulan uygulama için birim testleri ekleyeceksiniz.

testi denetlemek için XUnit.net kullanılacaktır; Moq, test için sahte bir nesne oluşturmak için kullanılır. İstenirse diğer sahte çerçeveler kullanılabilir; NSubstitute de iyi bir seçimdir. Bu öğreticide, sahte nesnenin iki şekilde nasıl ayarlanacağı gösterilmektedir: İlk olarak, bir dynamic nesne (.NET Framework 4'te tanıtılan) ve ikinci olarak arabirim kullanarak.

İçindekiler

Bu öğretici aşağıdaki bölümleri içerir.

Dinamik ile birim testi

Bu bölümde, dinamik bir nesne kullanarak Başlarken öğreticisinde oluşturulan uygulama için birim testi ekleyeceksiniz.

  1. Visual Studio 2013 için XUnit Runner uzantısını yükleyin.

  2. Başlarken öğreticisini tamamlayın veya MSDN Kod Galerisi'nden tamamlanmış uygulamayı indirin.

  3. Başlarken uygulamasının indirme sürümünü kullanıyorsanız, SignalR paketini projeye eklemek için Paket Yöneticisi Konsolu'nu açın ve Geri Yükle'ye tıklayın.

    Paketleri Geri Yükleme

  4. Birim testi için çözüme bir proje ekleyin. Çözüm Gezgini'da çö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. Sınıf Kitaplığı'nu seçin. Yeni projeyi TestLibrary olarak adlandırın ve Tamam'a tıklayın.

    Test Kitaplığı Oluştur

  5. Test kitaplığı projesinde SignalRChat projesine bir başvuru ekleyin. TestLibrary projesine sağ tıklayın ve Ekle, Başvuru...'yi seçin. Çözüm düğümü altındaki Projeler düğümünü seçin ve SignalRChat'i işaretleyin. Tamam'a tıklayın.

    Proje Başvurusu Ekle

  6. SignalR, Moq ve XUnit paketlerini TestLibrary projesine ekleyin. Paket Yöneticisi Konsolu'ndaVarsayılan Proje açılan listesini TestLibrary olarak ayarlayın. Konsol penceresinde aşağıdaki komutları çalıştırın:

    • Install-Package Microsoft.AspNet.SignalR

    • Install-Package Moq

    • Install-Package XUnit

      Paketleri Yükleme

  7. Test dosyasını oluşturun. TestLibrary projesine sağ tıklayın ve Ekle..., Sınıf'a tıklayın. Yeni sınıfa Tests.cs adını verin.

  8. Tests.cs dosyasının içeriğini aşağıdaki kodla değiştirin.

    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, IHubCallerConnectionContext türünde Moq kitaplığından nesnesi kullanılarak Mock bir test istemcisi oluşturulur (SignalR 2.1'de tür parametresi için atayındynamic.) IHubCallerConnectionContext Arabirim, istemcide yöntemleri çağırdığınız proxy nesnesidir. İşlev broadcastMessage daha sonra, sınıfı tarafından ChatHub çağrılabilmesi için sahte istemci için tanımlanır. Test altyapısı daha sonra sınıfın ChatHub yöntemini çağırır Send ve bu da sahte broadcastMessage işlevi çağırır.

  9. F6 tuşuna basarak çözümü oluşturun.

  10. Birim testini çalıştırın. Visual Studio'da Test, Windows, Test Gezgini'ne tıklayın. Test Gezgini penceresinde HubsAreMockableViaDynamic öğesine sağ tıklayın ve Seçili Testleri Çalıştır'ı seçin.

    Test Gezgini penceresinde HubsAreMockableViaDynamic'nin seçili olduğunu gösteren ekran görüntüsü.

  11. Test Gezgini penceresindeki alt bölmeyi denetleyerek testin geçtiğini doğrulayın. Pencerede testin başarılı olduğu gösterilir.

    Dinamik nesnenin kullanıldığı birim testinin geçirildiğini gösteren ekran görüntüsü.

Türe göre birim testi

Bu bölümde, Test edilecek yöntemi içeren bir arabirim kullanarak Başlarken öğreticisinde oluşturulan uygulama için bir test ekleyeceksiniz.

  1. Yukarıdaki Dinamik ile Birim testi öğreticisindeki 1-7 arası adımları tamamlayın.

  2. Tests.cs dosyasının içeriğini aşağıdaki kodla değiştirin.

    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 sahte istemci oluşturacağı yöntemin broadcastMessage imzasını tanımlayan bir arabirim oluşturulur. Daha sonra IHubCallerConnectionContext türünde nesne kullanılarak Mock bir sahte istemci oluşturulur (SignalR 2.1'de tür parametresi için atayındynamic.) IHubCallerConnectionContext Arabirim, istemcide yöntemleri çağırdığınız proxy nesnesidir.

    Test daha sonra bir örneğini ChatHuboluşturur ve ardından yöntemin broadcastMessage sahte bir sürümünü oluşturur ve bu sürüm de hub'da yöntemi çağrılarak Send çağrılır.

  3. F6 tuşuna basarak çözümü oluşturun.

  4. Birim testini çalıştırın. Visual Studio'da Test, Windows, Test Gezgini'ne tıklayın. Test Gezgini penceresinde HubsAreMockableViaDynamic öğesine sağ tıklayın ve Seçili Testleri Çalıştır'ı seçin.

    Test Gezgini penceresinde HubsAreMockableViaType'ın seçili olduğunu gösteren ekran görüntüsü.

  5. Test Gezgini penceresindeki alt bölmeyi denetleyerek testin geçtiğini doğrulayın. Pencerede testin başarılı olduğu gösterilir.

    Türe göre birim testinin geçtiğini gösteren ekran görüntüsü.