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
- Visual Studio 2013
- .NET 4.5
- SignalR w wersji 2
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.
Zainstaluj rozszerzenie XUnit Runner dla Visual Studio 2013.
Ukończ samouczek Wprowadzenie lub pobierz ukończoną aplikację z galerii kodu MSDN.
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.
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.
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.
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
Utwórz plik testowy. Kliknij prawym przyciskiem myszy projekt TestLibrary i kliknij polecenie Dodaj..., Klasa. Nadaj nowej klasie nazwę Tests.cs.
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 przypiszdynamic
dla parametru typu). InterfejsIHubCallerConnectionContext
jest obiektem proxy, za pomocą którego metody są wywoływane na kliencie. NastępniebroadcastMessage
funkcja jest definiowana dla pozornego klienta, aby można go było wywołać przez klasęChatHub
. Następnie aparat testowy wywołuje metodęSend
ChatHub
klasy, która z kolei wywołuje pozorowanąbroadcastMessage
funkcję.Skompiluj rozwiązanie, naciskając klawisz F6.
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.
Sprawdź, czy test zakończył się powodzeniem, sprawdzając dolne okienko w oknie Eksplorator testów. W oknie zostanie wyświetlony test z powodzeniem.
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.
Wykonaj kroki od 1 do 7 w samouczku Dotyczącym testowania jednostkowego z samouczkiem dynamicznym powyżej.
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życiuMock
obiektu typu IHubCallerConnectionContext (w usłudze SignalR 2.1 przypiszdynamic
parametr typu). InterfejsIHubCallerConnectionContext
jest obiektem proxy, za pomocą którego metody są wywoływane na kliencie.Następnie test tworzy wystąpienie
ChatHub
klasy , a następnie tworzy pozorną wersjębroadcastMessage
metody, która z kolei jest wywoływana przez wywołanieSend
metody w centrum.Skompiluj rozwiązanie, naciskając klawisz F6.
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.
Sprawdź, czy test zakończył się powodzeniem, sprawdzając dolne okienko w oknie Eksplorator testów. W oknie zostanie wyświetlony test z powodzeniem.