Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.SignalRInstall-Package MoqInstall-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
Mockobiektu z biblioteki Moq typu IHubCallerConnectionContext (w usłudze SignalR 2.1 przypiszdynamicdla parametru typu). InterfejsIHubCallerConnectionContextjest obiektem proxy, za pomocą którego metody są wywoływane na kliencie. NastępniebroadcastMessagefunkcja jest definiowana dla pozornego klienta, aby można go było wywołać przez klasęChatHub. Następnie aparat testowy wywołuje metodęSendChatHubklasy, która z kolei wywołuje pozorowanąbroadcastMessagefunkcję.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ę
broadcastMessagemetody, dla której aparat testowy utworzy pozornego klienta. Pozorny klient jest następnie tworzony przy użyciuMockobiektu typu IHubCallerConnectionContext (w usłudze SignalR 2.1 przypiszdynamicparametr typu). InterfejsIHubCallerConnectionContextjest 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ębroadcastMessagemetody, która z kolei jest wywoływana przez wywołanieSendmetody 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.