Sdílet prostřednictvím


Testování jednotek aplikace knihovnou SignalR

Patrick Fletcher

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

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.

  1. Nainstalujte rozšíření XUnit Runner pro Visual Studio 2013.

  2. Dokončete kurz Začínáme nebo si stáhněte dokončenou aplikaci z Galerie kódů MSDN.

  3. 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.

    Obnovení balíčků

  4. 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.

    Vytvořit knihovnu testů

  5. 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řidat odkaz na projekt

  6. 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

      Instalace balíčků

  7. 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.

  8. 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ďte dynamic parametr typu). Rozhraní IHubCallerConnectionContext je objekt proxy, pomocí kterého na klientovi vyvoláte metody. Funkce broadcastMessage je pak definována pro napodobení klienta, aby ji bylo možné volat ChatHub třídou . Testovací modul pak volá metodu SendChatHub třídy , která zase volá napodobenou broadcastMessage funkci.

  9. Sestavte řešení stisknutím klávesy F6.

  10. 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.

    Snímek obrazovky s vybranou možností HubsAreMockableViaDynamic v okně Průzkumníka testů

  11. 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ě.

    Snímek obrazovky znázorňující úspěšný test jednotek pomocí dynamického objektu

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.

  1. Proveďte kroky 1 až 7 v kurzu Testování jednotek s dynamickým kurzem .

  2. 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í objektu Mock typu IHubCallerConnectionContext (v SignalR 2.1 přiřaďte dynamic parametr typu). Rozhraní IHubCallerConnectionContext je objekt proxy, pomocí kterého na klientovi vyvoláte metody.

    Test pak vytvoří instanci ChatHuba pak vytvoří napodobenou verzi broadcastMessage metody, která je vyvolána voláním Send metody v centru .

  3. Sestavte řešení stisknutím klávesy F6.

  4. 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.

    Snímek obrazovky s vybranou možností HubsAreMockableViaType v okně Průzkumníka testů

  5. 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ě.

    Snímek obrazovky znázorňující úspěšné testování jednotek podle typu