Test des services Web
Mise à jour : novembre 2007
Vous pouvez tester des services Web en appelant des méthodes Web à partir de tests unitaires. Le test de services Web est comparable au test d'autres codes au moyen de tests unitaires dans le sens où vous pouvez utiliser des instructions Assert et que les tests produisent la même plage de résultats. Toutefois, l'espace de noms Microsoft.VisualStudio.TestTools.UnitTesting.Web de Visual Studio Team System Test Edition fournit des attributs et des méthodes permettant de tester spécifiquement les services Web ; ceux-ci sont décrits dans Test d'un service Web localement.
La liste suivante décrit deux façons de tester des services Web avec des tests unitaires :
Le service Web s'exécute sur un serveur Web actif. Il n'existe aucune exigence particulière pour tester un service Web qui s'exécute sur un serveur Web local ou distant, tel que IIS. Pour cela, ajoutez une référence Web, puis appelez les méthodes Web du service Web à partir de vos tests unitaires, de la même façon qu'ils appelleraient les méthodes d'un programme autre qu'un service Web. Pour plus d'informations sur l'ajout d'une référence Web, consultez Ajouter une référence Web, boîte de dialogue. Pour plus d'informations sur la création de tests unitaires, consultez Comment : générer un test unitaire et Comment : créer un test unitaire. Pour plus d'informations sur l'utilisation d'un test Web pour tester un service Web, consultez Comment : créer un test de service Web.
Le service Web n'est pas hébergé dans un serveur Web actif. Comme décrit dans Test d'un service Web localement, vous pouvez tester un service Web qui s'exécute sur votre ordinateur local et non dans un serveur Web, tel que IIS. Pour ce faire, utilisez un attribut fourni par les Outils de test Team System pour démarrer le serveur de développement ASP.NET. Un serveur temporaire est créé à localhost qui héberge le service Web que vous testez. Pour plus d'informations sur le serveur de développement ASP.NET, consultez Serveurs Web dans Visual Web Developer.
Test d'un service Web localement
Il s'agit du processus de test d'un service Web qui s'exécute sur votre ordinateur local mais pas dans IIS :
Créez le service Web sur le système de fichiers local. Pour plus d'informations, consultez Procédure pas à pas : création d'un service Web en utilisant Visual Basic ou Visual C#.
Générez des tests unitaires sur le service Web comme vous le feriez pour générer des tests unitaires standard. Pour plus d'informations, consultez Comment : générer un test unitaire.
Ajoutez l'attribut AspNetDevelopmentServerAttribute au test unitaire. Les arguments pour cette classe d'attributs pointent vers le site du service Web et nomment le serveur. Pour plus d'informations, consultez Garantie de l'accès au serveur de développement ASP.NET.
Dans le test unitaire, ajoutez un appel à la méthode TryUrlRedirection pour pointer l'objet de service Web vers le serveur approprié. Vérifiez qu'il retourne true, et utilisez une instruction Assert pour faire échouer le test si la redirection échoue. Pour plus d'informations, consultez Utilisation de la méthode TryUrlRedirection.
Appelez le service Web ou testez-le de la manière que vous jugez appropriée pour le tester entièrement. Pour obtenir un exemple, consultez Méthode de test d'un service Web exemple.
Garantie de l'accès au serveur de développement ASP.NET
Si le site du service Web se trouve sur votre système de fichiers local, il utilise le serveur de développement ASP.NET et il ne s'agit pas d'un site IIS. Dans ce cas, le processus de génération de tests unitaires démarre un serveur de développement ASP.NET pour le service Web et ajoute une référence Web au projet de test.
Le serveur de développement ASP.NET est temporaire, et la référence Web échouerait une fois le serveur arrêté. Les Outils de test Team System résolvent ce problème en fournissant l'attribut AspNetDevelopmentServer. Cette classe d'attributs possède deux constructeurs :
AspNetDevelopmentServerAttribute(string name, string pathToWebApp)
AspNetDevelopmentServerAttribute(string name, string pathToWebApp, string webAppRoot)
Les paramètres suivants sont utilisés avec cet attribut :
name est un nom défini par l'utilisateur qui est associé au serveur.
pathToWebApp est le chemin d'accès sur le disque au site Web que vous testez.
webAppRoot est le chemin d'accès virtuel au site sur le serveur. Par exemple, si webAppRoot a la valeur /WebSite1, le chemin d'accès au site est https://localhost:<port>/WebSite1. Pour le premier constructeur, la valeur par défaut est https://localhost:<port>/.
Remarque : |
---|
Les paramètres pathToWebApp et webAppRoot sont utilisés de la même façon avec AspNetDevelopmentServerAttribute qu'avec l'attribut AspNetDevelopmentServerHost qui est utilisé pour les tests unitaires ASP.NET. |
Lorsque vous marquez un test avec l'attribut AspNetDevelopmentServerAttribute, un serveur de développement ASP.NET est démarré à chaque exécution du test. Une entrée qui contient l'URL du site qui est testé est ajoutée à TestContext.Properties de la classe de test. La clé pour cette entrée est AspNetDevelopmentServer.<nom>, où
<nom> est la valeur stockée par l'argument name de l'attribut. Ce mécanisme garantit que le service Web est toujours disponible au niveau d'un serveur de développement ASP.NET lorsque le test est exécuté et que l'URL est connue au moment de l'exécution.
Pour tester un service Web de cette façon, vous pouvez générer des tests unitaires ou écrire un test unitaire manuellement et le marquer avec cet attribut. La création manuelle nécessite que vous disposiez d'une référence Web en place afin que vous puissiez référencer le type du service Web dans le code de votre test unitaire. Avant d'ajouter la référence Web, vous devez démarrer un serveur de développement ASP.NET en cliquant avec le bouton droit sur le projet de service Web et en sélectionnant Afficher dans le navigateur.
Utilisation de la méthode TryUrlRedirection
Lorsque vous disposez d'une référence Web, vous pouvez créer une instance de l'objet de service Web dans votre code de test, mais cela peut échouer au moment de l'exécution car la référence pointe vers l'URL d'une instance d'un serveur de développement ASP.NET qui peut ne plus être en cours d'exécution. Pour résoudre ce problème, utilisez la méthode TryUrlRedirection pour modifier l'objet de service Web afin qu'il pointe vers le serveur de développement ASP.NET qui a été démarré spécifiquement pour le test unitaire en cours d'exécution.
TryUrlRedirection est une méthode statique de la classe WebServiceHelper qui retourne une valeur booléenne qui indique si la redirection a réussi.
bool TryUrlRedirection(System.Web.Protocols.WebClientProtocol client, TestContext context, string identifier)
TryUrlRedirection accepte trois arguments :
client est l'objet de service Web à rediriger.
context est l'objet TestContext pour la classe.
identifier est le nom défini par l'utilisateur pour le serveur vers lequel l'objet de service Web est redirigé.
Après avoir appelé cette méthode, si elle réussit, vous pouvez appeler des méthodes Web sur l'objet de service Web. De cette manière, le service Web est accessible par l'intermédiaire du serveur de développement ASP.NET qui a été démarré lorsque vous avez démarré le test unitaire. Vous pouvez utiliser plusieurs attributs AspNetDevelopmentServer sur un seul test unitaire pour démarrer plusieurs serveurs, à condition que vous leur donniez des noms différents.
La génération d'un test unitaire n'ajoute pas automatiquement l'attribut AspNetDevelopmentServer ou l'appel de méthode TryUrlRedirection. Vous devez ajouter vous-même ces entités. L'attribut et la méthode se trouvent dans Microsoft.VisualStudio.TestTools.UnitTesting.Web. Par conséquent, vous aurez probablement besoin d'une instruction using ou Imports, comme le montre l'exemple suivant.
Méthode de test d'un service Web exemple
Il s'agit d'une méthode de test simple qui teste la méthode Web HelloWorld() d'un service Web :
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."
);
}
Voir aussi
Tâches
Comment : créer un test unitaire
Comment : paramétrer un serveur Web
Concepts
Serveurs Web dans Visual Web Developer
Référence
Microsoft.VisualStudio.TestTools.UnitTesting.Web
AspNetDevelopmentServerAttribute