octobre
2009
L’inconvénient d’un web service est qu’il a besoin d’un serveur web pour s’exécuter, comme IIS ou le serveur web de visual studio.
Or, bien que cela soit possible de lancer à la main le serveur à travers visual studio et d’effectuer des tests, cela devient problématique pour toute utilisation automatisée ou souhaitant tourner dans un environnement où aucun serveur web n’est lancé.
Comment faire alors pour tester son web service ?
Une solution est d’utiliser la DLL WebDev.WebHost.dll comme décrit ici par Phil Haack.
Je vais vous présenter ici cette solution en m’inspirant du post de Phil.
La première chose à faire est d’avoir un projet de test et (temporairement) d’avoir le projet contenant le svc en train de s’exécuter afin de pouvoir naviguer sur le service web.
On ajoute une référence service, et on utilise le bouton discover pour trouver le service web.
Visual studio nous génère une classe proxy permettant d’appeler le web service.
Reste à référencer le projet WebServiceTestUtility que vous trouverez en pièces jointes et qui contient le code nécessaire pour instancier le serveur WebDev.WebHost automatiquement.
On aura besoin du fichier WebDev.WebHost.dll, il faudra aller l’extraire du GAC en y naviguant (via une invite de commande par exemple) et le copier dans son projet. Le projet WebServiceTestUtility y fait référence.
On instanciera la classe WebHostWebServer avec le port et l’adresse précisée dans le web.config, comme ici :
1: [TestInitialize]
2: public void MyTestInitialize()
3: {
4: _webHostWebServer = new WebHostWebServer(58743, "/");
5: _webHostWebServer.Start();
6: _webHostWebServer.ExtractResource("MonServiceWCF.Tests.Unit.Resources.Web.config", "Web.config");
7: _webHostWebServer.ExtractResource("MonServiceWCF.Tests.Unit.Resources.MonWebService.svc", "MonWebService.svc");
8: }
On remarque que l’appel à la méthode ExtractResource qui prend en paramètres deux fichiers, le web.config et le fichier svc. Ce sont des fichiers du web service qui devront être copiés dans le test unitaires et inclus en tant que ressource.
Il ne reste plus qu’à instancier la classe proxy et vérifier que tout se passe bien.
1: [TestMethod]
2: public void FaitQuelqueChose_EnUtilisantLeWebDevWebHost_EstFonctionnel()
3: {
4: MonWebServiceClient monWebServiceClient = new MonWebServiceClient();
5: int value = monWebServiceClient.FaitQuelqueChose();
6:
7: Assert.AreEqual(10, value);
8: }
Sans oublier de libérer les ressources en fin de test :
1: [TestCleanup]
2: public void MyTestCleanup()
3: {
4: _webHostWebServer.Stop();
5: }
Notez que pour s’exécuter correctement, le test a besoin de pouvoir accéder à la DLL qui contient l’implémentation du service. Il faudra donc soit l’ajouter en tant que référence au projet afin qu’elle soit copiée dans le répertoire de destination, soit exécuter une post-build event du type :
copy « $(SolutionDir)leRepertoire\$(OutDir)MonServiceWCF.dll » « $(TargetDir) »
Il n’y a plus qu’à tester :
Commentaires récents
- [Tests] Arrange Act Assert, une traduction ? dans
- [UnitTest][C#] Tester une méthode privée dans
- Récupérer une valeur d’un contrôle depuis une autre Form / inclusions croisées et déclaration anticipée dans
- Tutoriel : Utiliser la ListBox et l’Isolated Storage dans vos applications Windows Phone 7 avec Silverlight dans
- Tutoriel : Utiliser la ListBox et l’Isolated Storage dans vos applications Windows Phone 7 avec Silverlight dans
Archives
- janvier 2013
- avril 2012
- janvier 2012
- juin 2011
- janvier 2011
- décembre 2010
- novembre 2010
- septembre 2010
- juin 2010
- mars 2010
- février 2010
- janvier 2010
- décembre 2009
- novembre 2009
- octobre 2009
- septembre 2009
- août 2009
- juillet 2009
- mai 2009
- avril 2009
- mars 2009
- janvier 2009
- décembre 2008
- novembre 2008
- octobre 2008
- septembre 2008
- août 2008
- juillet 2008
- juin 2008
- mai 2008
- avril 2008
- mars 2008
- février 2008
- janvier 2008
- décembre 2007
- novembre 2007
- octobre 2007
- septembre 2007
- août 2007
- juillet 2007
- juin 2007
- mai 2007