Comment tester un service Web C # avec Visual Studio 2008
Comment êtes-vous censé unité de tester un service web en C# avec Visual Studio 2008? Lorsque je créer un test unitaire, il ajoute une référence à la classe de service web au lieu d'une référence web. Il définit les attributs spécifiés dans:
http://msdn.microsoft.com/en-us/library/ms243399(SV.80).aspx#TestingWebServiceLocally
Encore, il va terminer sans exécuter le test. J'ai tenté d'ajouter de l'appel à WebServiceHelper.TryUrlRedirection(...)
mais l'appel n'aime pas la cible depuis il hérite de WebService
pas WebClientProtocol
.
source d'informationauteur Steven Behnke
Vous devez vous connecter pour publier un commentaire.
Ce que je fais habituellement est de ne pas tester directement à l'encontre de la web-service, mais pour essayer de mettre un peu de code que possible dans le service, et de l'appeler une autre classe qui fait tout le travail réel. Puis-je écrire des tests unitaires pour que les autres de la classe. Il s'avère que la classe peut parfois être utile en dehors de la web-service, de sorte que de cette façon, vous gagnez deux fois.
Si vous êtes à la rédaction d'un service web, essayez de mettre de la logique dans l'autre (testable) de la couche. Chaque méthode Web doit avoir un peu de code que possible. Ensuite, vous aurez peu de raison d'en tester la méthode web directement parce que vous pouvez tester les couches sous-jacentes.
Si vous consommez une méthode web, envelopper le générés de l'appelant dans une classe wrapper, et de mettre en œuvre une interface pour la classe wrapper. Puis, quand vous en avez besoin à appeler le service web, utilisez l'interface pour l'appel à la méthode. Vous souhaitez utiliser l'interface afin de rendre la classe wrapper remplaçables à chaud au cours des essais (à l'aide de Rhino se moque, Moq, ou TypeMock).
Vous pouvez ajouter une référence de service de votre projet de test d'unité ou de générer votre stub client et de mettre la classe dans votre projet de tests unitaires.
J'ai eu des problèmes avec cela, j'ai donc utiliser cette solution de contournement:
http://techkn0w.wordpress.com/2009/07/01/unit-testing-an-asmx-web-service-in-visual-studio-2008/
Au-dessus de ma méthode web tests unitaires, j'ai le texte suivant:
En plus de l'habituel:
Ce code provient de l'utilisation de Visual Studio 2008 Test de l'Unité de l'Assistant.
Savoir qu'il existe deux types de Service Web. Ceux que vous écrivez vous-même et que vous souhaitez tester, et ceux que vous consommez. Pour les premiers, les règles ci-dessus s'appliquent. Cependant, je dirais que, parfois, je vois des développeurs de tests contre les services web externes. La logique veut qu'un tiers de service n'est pas fiable et ne nécessite donc beaucoup plus de tests. En programmation orientée objet, il est préférable de comprendre la séparation de l'inquiétude que Martin Fowler et les autres nous ont raconté. Cela signifie que nous ne devrions pas les systèmes de test externe à notre propre.
Cependant, j'aime écrire des classes wrapper pour fournir des fonctionnalités utiles contre les services. Par exemple, Bing Maps a un certain nombre de étonnamment puissantes fonctions. J'écris des tests par rapport à ces juste pour s'assurer qu'ils me donnent les valeurs attendues. Bien que n'étant pas importante, le point, c'est que si le service web meurt pour une raison quelconque (clé d'authentification expire, etc), alors je peux être informé par le Serveur de Test.