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
- Visual Studio 2013
- .NET 4.5
- SignalR sürüm 2
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.
Visual Studio 2013 için XUnit Runner uzantısını yükleyin.
Başlarken öğreticisini tamamlayın veya MSDN Kod Galerisi'nden tamamlanmış uygulamayı indirin.
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.
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ığı 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.
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
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.
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. İşlevbroadcastMessage
daha sonra, sınıfı tarafındanChatHub
çağrılabilmesi için sahte istemci için tanımlanır. Test altyapısı daha sonra sınıfınChatHub
yöntemini çağırırSend
ve bu da sahtebroadcastMessage
işlevi çağırır.F6 tuşuna basarak çözümü oluşturun.
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 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 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.
Yukarıdaki Dinamik ile Birim testi öğreticisindeki 1-7 arası adımları tamamlayın.
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ılarakMock
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
ChatHub
oluşturur ve ardından yönteminbroadcastMessage
sahte bir sürümünü oluşturur ve bu sürüm de hub'da yöntemi çağrılarakSend
çağrılır.F6 tuşuna basarak çözümü oluşturun.
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 penceresindeki alt bölmeyi denetleyerek testin geçtiğini doğrulayın. Pencerede testin başarılı olduğu gösterilir.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin