Testowanie jednostkowe aplikacji SignalR

Fletcher Patryka

Warning

Ta dokumentacja nie jest najnowsza dla najnowszej wersji usługi sygnalizującej. Zapoznaj się z tematem ASP.NET Core sygnalizujący.

W tym artykule opisano korzystanie z funkcji testowania jednostkowego modułu sygnalizującego 2.

Wersje oprogramowania używane w tym temacie

Pytania i Komentarze

Prosimy o opinię na temat sposobu, w jaki lubię 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 samouczkiem, możesz je ogłosić na forum ASP.NET lub StackOverflow.com.

Aplikacje sygnalizujące testy jednostkowe

Aby utworzyć testy jednostkowe dla aplikacji sygnalizującej, można użyć funkcji testów jednostkowych w sygnale 2. Sygnał 2 zawiera interfejs IHubCallerConnectionContext , który może służyć do tworzenia obiektu makiety do symulowania metod centrów do testowania.

W tej sekcji dodasz testy jednostkowe dla aplikacji utworzonej w samouczku wprowadzenie przy użyciu XUnit.NET i MOQ.

XUnit.net zostanie użyta do kontroli testu; MOQ zostanie użyta do utworzenia obiektu makiety do testowania. W razie potrzeby można użyć innych struktur do imitacji; NSubstitute jest również dobrym wyborem. W tym samouczku pokazano, jak skonfigurować obiekt makiety na dwa sposoby: najpierw przy użyciu obiektu dynamic (wprowadzony w .NET Framework 4), a drugi przy użyciu interfejsu.

Spis treści

Ten samouczek zawiera następujące sekcje.

Testy jednostkowe z dynamiczną

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 wprowadzenielub Pobierz ukończoną aplikację z galerii kodu MSDN.

  3. Jeśli używasz wersji pobierania Wprowadzenie aplikacji, Otwórz konsolę Menedżera pakietów i kliknij przycisk Przywróć , aby dodać pakiet sygnalizujący do projektu.

    Przywróć pakiety

  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 C# węźle wybierz węzeł systemu Windows . Wybierz bibliotekę klas. Nazwij nowy projekt TestLibrary i kliknij przycisk OK.

    Utwórz bibliotekę testową

  5. Dodaj odwołanie w projekcie biblioteki testowej do projektu SignalRChat. Kliknij prawym przyciskiem myszy projekt TestLibrary i wybierz polecenie Dodaj, odwołanie... . Wybierz węzeł projekty w węźle rozwiązanie i sprawdź SignalRChat. Kliknij przycisk OK.

    Dodaj odwołanie do projektu

  6. Dodaj pakiety sygnalizujące, MOQ i XUnit do projektu TestLibrary . W konsoli Menedżera pakietówUstaw listę rozwijaną domyślny projekt na TestLibrary. Uruchom następujące polecenia w oknie konsoli:

    • Install-Package Microsoft.AspNet.SignalR

    • Install-Package Moq

    • Install-Package XUnit

      Zainstaluj pakiety

  7. Utwórz plik testowy. Kliknij prawym przyciskiem myszy projekt TestLibrary , a następnie kliknij przycisk Dodaj... , Klasa. Nadaj nowej klasie nazwę tests.cs.

  8. Zastąp zawartość Tests.cs następującym 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 obiektu Mock z biblioteki MOQ , typu IHubCallerConnectionContext (w sygnalizacji 2,1, przypisz dynamic parametru typu). Interfejs IHubCallerConnectionContext jest obiektem proxy, za pomocą którego są wywoływane metody na kliencie. Funkcja broadcastMessage jest następnie definiowana dla klienta makiety, dzięki czemu może być wywoływana przez klasę ChatHub. Aparat testowy następnie wywołuje metodę Send klasy ChatHub, która z kolei wywołuje funkcję broadcastMessage zamakietowania.

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

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

    Eksplorator testów

  11. Sprawdź, czy test zakończono testy, sprawdzając dolne okienko w oknie Eksplorator testów. Zostanie wyświetlone okno pokazujące, że test zakończono.

    Test zakończony niepowodzenie

Testy jednostkowe według typu

W tej sekcji dodasz test dla aplikacji utworzonej w samouczku wprowadzenie przy użyciu interfejsu, który zawiera metodę do przetestowania.

  1. Wykonaj kroki 1-7 w ramach testów jednostkowych za pomocą powyższego samouczka dynamicznego.

  2. Zastąp zawartość Tests.cs następującym 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ę metody broadcastMessage, dla której aparat testowy utworzy klienta programu. Klient, który jest następnie tworzony przy użyciu obiektu Mock, typu IHubCallerConnectionContext (w sygnalizującer 2,1, przypisz dynamic parametru typu). Interfejs IHubCallerConnectionContext jest obiektem proxy, za pomocą którego są wywoływane metody na kliencie.

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

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

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

    Eksplorator testów

  5. Sprawdź, czy test zakończono testy, sprawdzając dolne okienko w oknie Eksplorator testów. Zostanie wyświetlone okno pokazujące, że test zakończono.

    Test zakończony niepowodzenie