Komponententests für SignalR-Anwendungen
von Patrick Fletcher
Warnung
Diese Dokumentation gilt nicht für die neueste Version von SignalR. Sehen Sie sich ASP.NET Core SignalR an.
In diesem Artikel wird die Verwendung der Komponententestfunktionen von SignalR 2 beschrieben.
In diesem Thema verwendete Softwareversionen
- Visual Studio 2013
- .NET 4.5
- SignalR, Version 2
Fragen und Kommentare
Bitte hinterlassen Sie Feedback dazu, wie Ihnen dieses Tutorial gefallen hat und was wir in den Kommentaren unten auf der Seite verbessern könnten. Wenn Sie Fragen haben, die nicht direkt mit dem Tutorial zusammenhängen, können Sie diese im ASP.NET SignalR-Forum oder StackOverflow.com posten.
Komponententests für SignalR-Anwendungen
Sie können die Komponententestfeatures in SignalR 2 verwenden, um Komponententests für Ihre SignalR-Anwendung zu erstellen. SignalR 2 enthält die IHubCallerConnectionContext-Schnittstelle , die verwendet werden kann, um ein Mockobjekt zu erstellen, um Ihre Hubmethoden für Tests zu simulieren.
In diesem Abschnitt fügen Sie Komponententests für die Anwendung hinzu, die im Erste Schritte-Tutorial mit XUnit.net und Moq erstellt wurde.
XUnit.net wird verwendet, um den Test zu steuern; Moq wird verwendet, um ein Mockobjekt zum Testen zu erstellen. Bei Bedarf können andere Mocking-Frameworks verwendet werden. NSubstitute ist auch eine gute Wahl. In diesem Tutorial wird veranschaulicht, wie Sie das Mockobjekt auf zwei Arten einrichten: Erstens mithilfe eines dynamic
Objekts (eingeführt in .NET Framework 4) und zweitens mithilfe einer Schnittstelle.
Inhalte
Dieses Tutorial enthält die folgenden Abschnitte.
Komponententests mit Dynamic
In diesem Abschnitt fügen Sie einen Komponententest für die Anwendung hinzu, die im Erste Schritte Tutorial mit einem dynamischen Objekt erstellt wurde.
Installieren Sie die XUnit Runner-Erweiterung für Visual Studio 2013.
Führen Sie entweder das tutorial Erste Schritte aus, oder laden Sie die vollständige Anwendung aus der MSDN Code Gallery herunter.
Wenn Sie die Downloadversion der Erste Schritte Anwendung verwenden, öffnen Sie die Paket-Manager-Konsole, und klicken Sie auf Wiederherstellen, um das SignalR-Paket dem Projekt hinzuzufügen.
Fügen Sie der Projektmappe für den Komponententest ein Projekt hinzu. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf Ihre Projektmappe, und wählen Sie Hinzufügen, Neues Projekt... aus. Wählen Sie unter dem Knoten C# den Knoten Windows aus. Wählen Sie Klassenbibliothek aus. Nennen Sie das neue Projekt TestLibrary , und klicken Sie auf OK.
Fügen Sie dem SignalRChat-Projekt einen Verweis im Testbibliotheksprojekt hinzu. Klicken Sie mit der rechten Maustaste auf das Projekt TestLibrary, und wählen Sie Hinzufügen, Verweis... aus. Wählen Sie unter dem Knoten Projektmappe den Knoten Projekte aus, und aktivieren Sie SignalRChat. Klicken Sie auf OK.
Fügen Sie dem TestLibrary-Projekt die Pakete SignalR, Moq und XUnit hinzu. Legen Sie in der Paket-Manager-Konsole die Dropdownliste Standardprojekt auf TestLibrary fest. Führen Sie die folgenden Befehle im Konsolenfenster aus:
Install-Package Microsoft.AspNet.SignalR
Install-Package Moq
Install-Package XUnit
Erstellen Sie die Testdatei. Klicken Sie mit der rechten Maustaste auf das Projekt TestLibrary , und klicken Sie auf Hinzufügen..., Klasse. Nennen Sie die neue Klasse Tests.cs.
Ersetzen Sie den Inhalt von Tests.cs durch den folgenden Code.
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); } } }
Im obigen Code wird ein Testclient mit dem
Mock
Objekt aus der Moq-Bibliothek vom Typ IHubCallerConnectionContext erstellt (in SignalR 2.1 für den Typparameter zuweisendynamic
.) DieIHubCallerConnectionContext
Schnittstelle ist das Proxyobjekt, mit dem Sie Methoden auf dem Client aufrufen. DiebroadcastMessage
Funktion wird dann für den Mockclient definiert, sodass sie von derChatHub
-Klasse aufgerufen werden kann. Die Test-Engine ruft dann dieSend
-Methode derChatHub
-Klasse auf, die wiederum die simulierte Funktion aufruftbroadcastMessage
.Erstellen Sie die Lösung, indem Sie F6 drücken.
Führen Sie den Komponententest aus. Wählen Sie in Visual Studio Test, Windows, Test Explorer aus. Klicken Sie im Fenster Test Explorer mit der rechten Maustaste auf HubsAreMockableViaDynamic, und wählen Sie Ausgewählte Tests ausführen aus.
Überprüfen Sie, ob der Test bestanden wurde, indem Sie den unteren Bereich im Fenster Test Explorer überprüfen. Im Fenster wird angezeigt, dass der Test bestanden wurde.
Komponententests nach Typ
In diesem Abschnitt fügen Sie einen Test für die Anwendung hinzu, die im Tutorial Erste Schritte erstellt wurde, indem Sie eine Schnittstelle verwenden, die die zu testende Methode enthält.
Führen Sie die Schritte 1 bis 7 im obigen Tutorial Komponententests mit dynamischer Dynamik aus.
Ersetzen Sie den Inhalt von Tests.cs durch den folgenden Code.
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(); } } }
Im obigen Code wird eine Schnittstelle erstellt, die die Signatur der
broadcastMessage
Methode definiert, für die die Test-Engine einen Mockclient erstellt. Anschließend wird ein Mockclient mit demMock
-Objekt vom Typ IHubCallerConnectionContext erstellt (in SignalR 2.1 für den Typparameter zuweisendynamic
).) DieIHubCallerConnectionContext
Schnittstelle ist das Proxyobjekt, mit dem Sie Methoden auf dem Client aufrufen.Der Test erstellt dann eine instance von und
ChatHub
erstellt dann eine Mockversion derbroadcastMessage
Methode, die wiederum durch Aufrufen derSend
-Methode auf dem Hub aufgerufen wird.Erstellen Sie die Lösung, indem Sie F6 drücken.
Führen Sie den Komponententest aus. Wählen Sie in Visual Studio Test, Windows, Test Explorer aus. Klicken Sie im Fenster Test Explorer mit der rechten Maustaste auf HubsAreMockableViaDynamic, und wählen Sie Ausgewählte Tests ausführen aus.
Überprüfen Sie, ob der Test bestanden wurde, indem Sie den unteren Bereich im Fenster Test Explorer überprüfen. Im Fenster wird angezeigt, dass der Test bestanden wurde.