Testowanie jednostkowe aplikacji SignalR

Autor : Patrick Fletcher

Ostrzeżenie

Ta dokumentacja nie dotyczy najnowszej wersji usługi SignalR. Przyjrzyj się ASP.NET Core SignalR.

W tym artykule opisano korzystanie z funkcji testów jednostkowych usługi SignalR 2.

Wersje oprogramowania używane w tym temacie

Pytania i komentarze

Przekaż opinię na temat tego, jak ci się podobał ten samouczek i co możemy ulepszyć w komentarzach w dolnej części strony. Jeśli masz pytania, które nie są bezpośrednio związane z tym samouczkiem, możesz opublikować je na forum ASP.NET SignalR lub StackOverflow.com.

Testowanie jednostkowe aplikacji SignalR

Funkcje testów jednostkowych w usłudze SignalR 2 umożliwiają tworzenie testów jednostkowych dla aplikacji SignalR. Usługa SignalR 2 zawiera interfejs IHubCallerConnectionContext , którego można użyć do utworzenia makiety obiektu w celu symulowania metod centrum do testowania.

W tej sekcji dodasz testy jednostkowe dla aplikacji utworzonej w samouczku Wprowadzenie przy użyciu XUnit.net i Moq.

XUnit.net będą używane do kontrolowania testu; Moq zostanie użyty do utworzenia makiety obiektu do testowania. Inne szydercze struktury mogą być używane w razie potrzeby; NSubstitute jest również dobrym wyborem. W tym samouczku pokazano, jak skonfigurować pozorny obiekt na dwa sposoby: najpierw przy użyciu obiektu (wprowadzonego dynamic w .NET Framework 4) i drugiego przy użyciu interfejsu.

Zawartość

Ten samouczek zawiera następujące sekcje.

Testowanie jednostkowe przy użyciu funkcji dynamicznej

W tej sekcji dodasz test jednostkowy dla aplikacji utworzonej w samouczku Wprowadzenie przy użyciu obiektu dynamicznego.

  1. Zainstaluj rozszerzenie XUnit Runner dla Visual Studio 2013.

  2. Ukończ samouczek Wprowadzenie lub pobierz ukończoną aplikację z galerii kodu MSDN.

  3. Jeśli używasz wersji pobierania aplikacji Wprowadzenie, otwórz konsolę menedżera pakietów i kliknij przycisk Przywróć, aby dodać pakiet SignalR do projektu.

    Przywracanie pakietów

  4. Dodaj projekt do rozwiązania dla testu jednostkowego. Kliknij prawym przyciskiem myszy rozwiązanie w Eksplorator rozwiązań i wybierz polecenie Dodaj, Nowy projekt.... W węźle C# wybierz węzeł systemu Windows. Wybierz pozycję Biblioteka klas. Nadaj nowej nazwie projekt TestLibrary i kliknij przycisk OK.

    Tworzenie biblioteki testowej

  5. Dodaj odwołanie w projekcie biblioteki testowej do projektu SignalRChat. Kliknij prawym przyciskiem myszy projekt TestLibrary i wybierz pozycję Dodaj, odwołanie.... Wybierz węzeł Projekty w węźle Rozwiązanie i zaznacz pole wyboru SignalRChat. Kliknij przycisk OK.

    Dodawanie odwołania do projektu

  6. Dodaj pakiety SignalR, Moq i XUnit do projektu TestLibrary . W konsoli menedżera pakietów ustaw listę rozwijaną Projekt domyślny na TestLibrary. Uruchom następujące polecenia w oknie konsoli:

    • Install-Package Microsoft.AspNet.SignalR

    • Install-Package Moq

    • Install-Package XUnit

      Instalowanie pakietów

  7. Utwórz plik testowy. Kliknij prawym przyciskiem myszy projekt TestLibrary i kliknij polecenie Dodaj..., Klasa. Nadaj nowej klasie nazwę Tests.cs.

  8. Zastąp zawartość pliku Tests.cs poniższym kodem.

    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);
            }
        }
    }
    

    W powyższym kodzie klient testowy jest tworzony przy użyciu Mock obiektu z biblioteki Moq typu IHubCallerConnectionContext (w usłudze SignalR 2.1 przypisz dynamic dla parametru typu). Interfejs IHubCallerConnectionContext jest obiektem proxy, za pomocą którego metody są wywoływane na kliencie. Następnie broadcastMessage funkcja jest definiowana dla pozornego klienta, aby można go było wywołać przez klasę ChatHub . Następnie aparat testowy wywołuje metodę SendChatHub klasy, która z kolei wywołuje pozorowaną broadcastMessage funkcję.

  9. Skompiluj rozwiązanie, naciskając klawisz F6.

  10. Uruchom test jednostkowy. W programie Visual Studio wybierz pozycję Test, Windows, Eksplorator testów. W oknie Eksplorator testów kliknij prawym przyciskiem myszy pozycję HubsAreMockableViaDynamic i wybierz polecenie Uruchom wybrane testy.

    Zrzut ekranu przedstawiający pozycję HubsAreMockableViaDynamic wybraną w oknie Eksplorator testów.

  11. Sprawdź, czy test zakończył się powodzeniem, sprawdzając dolne okienko w oknie Eksplorator testów. W oknie zostanie wyświetlony test z powodzeniem.

    Zrzut ekranu przedstawiający test jednostkowy z pomyślnie przekazanym obiektem dynamicznym.

Testowanie jednostkowe według typu

W tej sekcji dodasz test dla aplikacji utworzonej w samouczku Wprowadzenie przy użyciu interfejsu zawierającego metodę do przetestowania.

  1. Wykonaj kroki od 1 do 7 w samouczku Dotyczącym testowania jednostkowego z samouczkiem dynamicznym powyżej.

  2. Zastąp zawartość pliku Tests.cs poniższym kodem.

    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();
           }
        }
    }
    

    W powyższym kodzie tworzony jest interfejs definiujący sygnaturę broadcastMessage metody, dla której aparat testowy utworzy pozornego klienta. Pozorny klient jest następnie tworzony przy użyciu Mock obiektu typu IHubCallerConnectionContext (w usłudze SignalR 2.1 przypisz dynamic parametr typu). Interfejs IHubCallerConnectionContext jest obiektem proxy, za pomocą którego metody są wywoływane na kliencie.

    Następnie test tworzy wystąpienie ChatHubklasy , a następnie tworzy pozorną wersję broadcastMessage metody, która z kolei jest wywoływana przez wywołanie Send metody w centrum.

  3. Skompiluj rozwiązanie, naciskając klawisz F6.

  4. Uruchom test jednostkowy. W programie Visual Studio wybierz pozycję Test, Windows, Eksplorator testów. W oknie Eksplorator testów kliknij prawym przyciskiem myszy pozycję HubsAreMockableViaDynamic i wybierz polecenie Uruchom wybrane testy.

    Zrzut ekranu przedstawiający pozycję HubsAreMockableViaType wybraną w oknie Eksplorator testów.

  5. Sprawdź, czy test zakończył się powodzeniem, sprawdzając dolne okienko w oknie Eksplorator testów. W oknie zostanie wyświetlony test z powodzeniem.

    Zrzut ekranu przedstawiający pomyślnie przekazany test jednostkowy według typu.