Testování jednotek aplikace knihovnou SignalR
Upozornění
Tato dokumentace není určená pro nejnovější verzi služby SignalR. Podívejte se na ASP.NET Core SignalR.
Tento článek popisuje použití funkcí testování jednotek v signalR 2.
Verze softwaru použité v tomto tématu
- Visual Studio 2013
- .NET 4.5
- SignalR verze 2
Dotazy a komentáře
V komentářích v dolní části stránky nám napište, jak se vám tento kurz líbil a co bychom mohli zlepšit. Pokud máte dotazy, které nesouvisejí přímo s kurzem, můžete je publikovat na fóru ASP.NET SignalR nebo StackOverflow.com.
Testování jednotek aplikací SignalR
Funkce testování jednotek v SignalR 2 můžete použít k vytvoření testů jednotek pro vaši aplikaci SignalR. SignalR 2 obsahuje rozhraní IHubCallerConnectionContext , které se dá použít k vytvoření napodobeného objektu pro simulaci metod centra pro účely testování.
V této části přidáte testy jednotek pro aplikaci vytvořenou v Začínáme kurzu pomocí XUnit.net a Moq.
XUnit.net se použijí k řízení zkoušky; Moq se použije k vytvoření napodobení objektu pro testování. V případě potřeby lze použít jiné napodobované architektury; NSubstitute je také dobrou volbou. Tento kurz ukazuje, jak nastavit objekt napodobení dvěma způsoby: první pomocí objektu dynamic
(zavedeného v rozhraní .NET Framework 4) a druhý pomocí rozhraní.
Obsah
Tento kurz obsahuje následující části.
Testování částí s dynamickým využitím
V této části přidáte test jednotek pro aplikaci vytvořenou v Začínáme kurzu pomocí dynamického objektu.
Nainstalujte rozšíření XUnit Runner pro Visual Studio 2013.
Dokončete kurz Začínáme nebo si stáhněte dokončenou aplikaci z Galerie kódů MSDN.
Pokud používáte staženou verzi aplikace Začínáme, otevřete konzolu Správce balíčků a kliknutím na Obnovit přidejte balíček SignalR do projektu.
Přidejte projekt do řešení pro test jednotek. Klikněte pravým tlačítkem na řešení v Průzkumník řešení a vyberte Přidat, Nový projekt.... V uzlu C# vyberte uzel Windows. Vyberte Knihovna tříd. Pojmenujte nový projekt TestLibrary a klikněte na OK.
Do projektu knihovny testů přidejte odkaz na projekt SignalRChat. Klikněte pravým tlačítkem na projekt TestLibrary a vyberte Přidat, Odkaz.... Vyberte uzel Projects (Projekty ) v uzlu Solution (Řešení ) a zaškrtněte SignalRChat. Klikněte na OK.
Přidejte balíčky SignalR, Moq a XUnit do projektu TestLibrary . V konzole Správce balíčků nastavte rozevírací seznam Výchozí projekt na TestLibrary. V okně konzoly spusťte následující příkazy:
Install-Package Microsoft.AspNet.SignalR
Install-Package Moq
Install-Package XUnit
Vytvořte testovací soubor. Klikněte pravým tlačítkem na projekt TestLibrary a klikněte na Přidat..., Třída. Pojmenujte novou třídu Tests.cs.
Obsah souboru Tests.cs nahraďte následujícím kódem.
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); } } }
Ve výše uvedeném kódu se vytvoří testovací klient pomocí objektu
Mock
z knihovny Moq typu IHubCallerConnectionContext (v SignalR 2.1 přiřaďtedynamic
parametr typu). RozhraníIHubCallerConnectionContext
je objekt proxy, pomocí kterého na klientovi vyvoláte metody. FunkcebroadcastMessage
je pak definována pro napodobení klienta, aby ji bylo možné volatChatHub
třídou . Testovací modul pak volá metoduSend
ChatHub
třídy , která zase volá napodobenoubroadcastMessage
funkci.Sestavte řešení stisknutím klávesy F6.
Spusťte test jednotek. V sadě Visual Studio vyberte Test, Windows, Průzkumník testů. V okně Průzkumníka testů klikněte pravým tlačítkem na HubsAreMockableViaDynamic a vyberte Spustit vybrané testy.
Zkontrolujte dolní podokno v okně Průzkumníka testů a ověřte, že test proběhl úspěšně. V okně se zobrazí, že test proběhl úspěšně.
Testování jednotek podle typu
V této části přidáte test pro aplikaci vytvořenou v Začínáme kurzu pomocí rozhraní, které obsahuje testovanou metodu.
Proveďte kroky 1 až 7 v kurzu Testování jednotek s dynamickým kurzem .
Obsah souboru Tests.cs nahraďte následujícím kódem.
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(); } } }
Ve výše uvedeném kódu se vytvoří rozhraní definující podpis
broadcastMessage
metody, pro kterou testovací modul vytvoří napodobeninu klienta. Potom se vytvoří napodobený klient pomocí objektuMock
typu IHubCallerConnectionContext (v SignalR 2.1 přiřaďtedynamic
parametr typu). RozhraníIHubCallerConnectionContext
je objekt proxy, pomocí kterého na klientovi vyvoláte metody.Test pak vytvoří instanci
ChatHub
a pak vytvoří napodobenou verzibroadcastMessage
metody, která je vyvolána volánímSend
metody v centru .Sestavte řešení stisknutím klávesy F6.
Spusťte test jednotek. V sadě Visual Studio vyberte Test, Windows, Průzkumník testů. V okně Průzkumníka testů klikněte pravým tlačítkem na HubsAreMockableViaDynamic a vyberte Spustit vybrané testy.
Zkontrolujte dolní podokno v okně Průzkumníka testů a ověřte, že test proběhl úspěšně. V okně se zobrazí, že test proběhl úspěšně.