Testen von Webdiensten
Aktualisiert: November 2007
Sie können Webdienste testen, indem Sie Webmethoden von Komponententests aus aufrufen. Das Testen von Webdiensten ist insofern dem Testen von anderem Code mit Komponententests vergleichbar, als Sie Assert-Anweisungen verwenden können und die Tests denselben Bereich von Ergebnissen liefern. Der Microsoft.VisualStudio.TestTools.UnitTesting.Web-Namespace von Visual Studio Team System Test Edition verfügt jedoch über spezielle Attribute und Methoden zum Testen von Webdiensten, die unter Lokales Testen eines Webdiensts beschrieben werden.
In der folgenden Liste werden zwei Möglichkeiten beschrieben, Webdienste mit Komponententests zu testen:
Der Webdienst wird auf einem aktiven Webserver ausgeführt. Es gibt keine besonderen Anforderungen zum Testen eines Webdiensts, der auf einem lokalen oder einem Remote-Webserver wie IIS ausgeführt wird. Dazu fügen Sie einen Webverweis hinzu und rufen dann die Webmethoden des Webdiensts von den Komponententests aus ebenso auf, wie diese die Methoden eines Programms aufrufen würden, das kein Webdienst ist. Informationen zum Hinzufügen von Webverweisen finden Sie unter Dialogfeld "Webverweis hinzufügen". Informationen zum Erstellen von Komponententests finden Sie unter Gewusst wie: Generieren eines Komponententests und Gewusst wie: Erstellen eines Komponententests. Informationen zum Verwenden eines Webtests zum Testen eines Webdiensts finden Sie unter Gewusst wie: Erstellen eines Webdiensttests.
Der Webdienst wird nicht auf einem aktiven Webserver gehostet. Wie unter Lokales Testen eines Webdiensts beschrieben, können Sie einen Webdienst testen, der auf einem lokalen Computer und nicht auf einem Webserver wie IIS ausgeführt wird. Dazu verwenden Sie ein von Testtools in Team System bereitgestelltes Attribut zum Starten von ASP.NET Development Server. Damit wird unter localhost ein temporärer Server erstellt, der als Host für den getesteten Webdienst dient. Weitere Informationen zu ASP.NET Development Server finden Sie unter Webserver in Visual Web Developer.
Lokales Testen eines Webdiensts
Im Folgenden wird das Verfahren zum Testen eines Webdiensts beschrieben, der auf einem lokalen Computer, jedoch nicht in IIS ausgeführt wird:
Erstellen Sie den Webdienst im lokalen Dateisystem. Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Erstellen eines Webdiensts mit Visual Basic oder Visual C#.
Generieren Sie Komponententests für den Webdienst nach dem Standardverfahren zum Generieren von Komponententests. Weitere Informationen finden Sie unter Gewusst wie: Generieren eines Komponententests.
Fügen Sie dem Komponententest das AspNetDevelopmentServerAttribute-Attribut hinzu. Die Argumente für diese Attributklasse verweisen auf die (lokale) Website des Webdiensts und den Namen des Servers. Weitere Informationen finden Sie unter Gewährleisten des Zugriffs auf ASP.NET Development Server.
Fügen Sie dem Komponententest einen Aufruf der TryUrlRedirection-Methode hinzu, um dem Webdienstobjekt einen Verweis auf den richtigen Server hinzuzufügen. Stellen Sie sicher, dass true zurückgegeben wird, und verwenden Sie eine Assert-Anweisung, damit der Test fehlschlägt, wenn die Umleitung fehlschlägt. Weitere Informationen finden Sie unter Verwenden der TryUrlRedirection-Methode.
Rufen Sie den Webdienst auf, oder führen Sie ihn auf andere Weise aus, um ihn gründlich zu testen. Ein Beispiel dafür finden Sie unter Beispiel für eine Webdienst-Testmethode.
Gewährleisten des Zugriffs auf ASP.NET Development Server
Wenn sich die Website des Webdiensts im lokalen Dateisystem befindet, verwendet der Dienst ASP.NET Development Server. Bei der Website handelt es sich nicht um eine IIS-Site. In diesem Fall startet der Prozess zum Generieren von Komponententests einen ASP.NET Development Server für den Webdienst und fügt dem Testprojekt einen Webverweis hinzu.
Der ASP.NET Development Server wird nur temporär ausgeführt, und der Webverweis würde nach Beenden des Servers fehlschlagen. Testtools in Team System löst dieses Problem durch Bereitstellen des AspNetDevelopmentServer-Attributs. Diese Attributklasse verfügt über zwei Konstruktoren:
AspNetDevelopmentServerAttribute(string name, string pathToWebApp)
AspNetDevelopmentServerAttribute(string name, string pathToWebApp, string webAppRoot)
Die folgenden Parameter werden mit diesem Attribut verwendet:
name ist ein benutzerdefinierter Name, der dem Server zugeordnet ist.
pathToWebApp ist der Pfad auf dem Datenträger zur getesteten Website.
webAppRoot ist der virtuelle Pfad, in dem die Website auf dem Server angezeigt wird. Wenn webAppRoot z. B. auf /WebSite1 festgelegt wird, ist der Pfad zur Website https://localhost:<Port>/WebSite1 Die Standardeinstellung für den ersten Konstruktor ist https://localhost:<Port>/
Hinweis: |
---|
Die Parameter pathToWebApp und webAppRoot werden mit AspNetDevelopmentServerAttribute auf dieselbe Weise wie das AspNetDevelopmentServerHost-Attribut für ASP.NET-Komponententests verwendet. |
Wenn Sie einen Test mit dem Attribut AspNetDevelopmentServerAttribute kennzeichnen, wird bei jedem Ausführen des Tests ein ASP.NET Development Server gestartet. Ein Eintrag, der den URL der getesteten Website enthält, wird TestContext.Properties der Testklasse hinzugefügt. Der Schlüssel für diesen Eintrag ist AspNetDevelopmentServer.<Name>, wobei
<Name> der Wert des name-Arguments des Attributs ist. Mit diesem Mechanismus wird sichergestellt, dass der Webdienst in einem ASP.NET Development Server bei Ausführung des Tests stets verfügbar ist und dass der URL zur Laufzeit bekannt ist.
Um einen Webdienst auf diese Weise zu testen, können Sie Komponententests generieren oder einen Komponententest manuell erstellen und ihn mit diesem Attribut kennzeichnen. Beim manuellen Erstellen muss ein Webverweis vorhanden sein, damit Sie im Code des Komponententests einen Verweis auf den Typ des Webdiensts angeben können. Bevor Sie den Webverweis hinzufügen, müssen Sie einen ASP.NET Development Server starten, indem Sie mit der rechten Maustaste auf das Webdienstprojekt klicken und In Browser anzeigen auswählen.
Verwenden der TryUrlRedirection-Methode
Wenn Sie einen Webverweis erstellt haben, können Sie eine Instanz des Webdienstobjekts im Testcode erzeugen. Dies kann jedoch zur Laufzeit fehlschlagen, da der Verweis zum URL einer Instanz von ASP.NET Development Server führt, die möglicherweise nicht mehr ausgeführt wird. Zum Beheben dieses Problems verwenden Sie die TryUrlRedirection-Methode, um das Webdienstobjekt so zu ändern, dass es auf den ASP.NET Development Server verweist, der speziell zur Ausführung des Komponententests gestartet wurde.
TryUrlRedirection ist eine statische Methode der WebServiceHelper-Klasse, die einen booleschen Wert zurückgibt, der anzeigt, ob die Umleitung erfolgreich war.
bool TryUrlRedirection(System.Web.Protocols.WebClientProtocol client, TestContext context, string identifier)
TryUrlRedirection akzeptiert drei Argumente:
client ist das Webdienstobjekt, das umgeleitet werden soll.
context ist das TestContext-Objekt für die Klasse.
identifier ist der benutzerdefinierte Name für den Server, auf den das Webdienstobjekt umgeleitet wird.
Nachdem diese Methode erfolgreich aufgerufen wurde, können Sie Webmethoden für das Webdienstobjekt aufrufen. Auf diese Weise wird über den ASP.NET Development Server auf den Webdienst zugegriffen, der beim Starten des Komponententests gestartet wurde. Sie können mehrere AspNetDevelopmentServer-Attribute für einen einzelnen Komponententest verwenden, um mehrere Server zu starten, solange Sie ihnen verschiedene Namen geben.
Beim Generieren von Komponententests wird das AspNetDevelopmentServer-Attribut oder der TryUrlRedirection-Methodenaufruf nicht automatisch hinzugefügt. Sie müssen diese Entitäten selbst hinzufügen. Sowohl das Attribut als auch die Methode befinden sich in Microsoft.VisualStudio.TestTools.UnitTesting.Web. Daher benötigen Sie wahrscheinlich eine using-Anweisung oder eine Imports-Anweisung, wie im folgenden Beispiel dargestellt.
Beispiel für eine Webdienst-Testmethode
Im Folgenden eine einfache Testmethode zum Testen der HelloWorld()-Webmethode eines Webdiensts:
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.VisualStudio.TestTools.UnitTesting.Web;
using TestProject1.localhost;
[TestMethod]
[AspNetDevelopmentServer("HelloWorldServer", @"C:\Documents and Settings\user\My Documents\Visual Studio 2005\WebSites\WebSite1")]
public void HelloWorldTest()
{
HelloWorldService target = new HelloWorldService();
Assert.IsTrue( WebServiceHelper.TryUrlRedirection
(
target,
testContextInstance,
"HelloWorldServer"
),
"Web service redirection failed."
);
string expected = "Hello World";
string actual;
actual = target.HelloWorld();
Assert.AreEqual(
expected,
actual,
"TestProject1.localhost.HelloWorldService.HelloWorld did not return the expected value."
);
}
Siehe auch
Aufgaben
Gewusst wie: Erstellen eines Komponententests
Gewusst wie: Parametrisieren eines Webservers
Konzepte
Webserver in Visual Web Developer
Referenz
Microsoft.VisualStudio.TestTools.UnitTesting.Web
AspNetDevelopmentServerAttribute