5

J'ai une application qui envoie des messages à un service Web externe. Je compile et déploie cette application en utilisant MSBuild et Cruisecontrol.NET. Comme CCNET construit et déploie l'application, il exécute également un ensemble de tests en utilisant NUnit. J'aimerais maintenant tester la communication du service Web. Mon idée est que, dans le cadre du processus de construction, un service Web doit être généré (basé sur les services Web externes WSDL) et déployé sur le serveur Web local des serveurs de génération. Tout ce que le web service devrait faire est de recevoir le message et de le placer sur le système de fichiers afin que je puisse le vérifier en utilisant NUnit ordinaire par exemple. Cela faciliterait également le développement car les nouveaux développeurs n'auraient qu'à lancer le script de build et à être opérationnel (sans avoir à passer du temps à établir une connexion avec le service tiers).Test automatique de la communication de service Web

Existe-t-il des utilitaires existants qui peuvent facilement se moquer d'un service Web basé sur un WSDL? Quelqu'un fait quelque chose de similaire en utilisant MSBuild?

Y a-t-il d'autres moyens de tester ce scénario?

Répondre

3

J'ai juste commencé à regarder dans http://www.soapui.org/ et il semblerait que cela fonctionnera bien pour tester des services Web.

En outre, peut-être envisager d'ajouter une couche d'abstraction dans votre service Web, chaque appel de service appelle directement une méthode testable (en dehors de la portée Web)? Je l'ai fait avec un projet plus important sur lequel je travaille, et sa testabilité fonctionne bien.

+0

J'ai utilisé soapui pour les tests fonctionnels et de performance de nos services web, et ça fonctionne très bien :) –

1

En général, un très bon moyen de tester des choses comme ceci est d'utiliser mock objects. Au travail, nous utilisons le produit TypeMock pour tester des choses comme la communication Web Service et d'autres dépendances externes. Cela coûte de l'argent, donc pour cette raison, il peut ne pas convenir à vos besoins, mais je pense que c'est un produit fantastique. Je peux vous dire par expérience personnelle qu'il s'intègre très bien avec NUnit et CCNet.

Il y a une syntaxe très simple où vous dites essentiellement "quand cette méthode/propriété est appelée, je veux que vous retourniez cette valeur à la place." C'est parfait pour tester des choses comme les pannes de réseau, les fichiers qui ne sont pas présents et, bien sûr, les services Web.

1

Jetez un coup d'œil à NMock2. C'est un produit moqueur open-source et vous permet de créer des implémentations "virtuelles" pour des interfaces qui prennent en charge une interaction riche et profonde.

Par exemple, si votre interface WS est appelée IService et a une méthode Data GetData(), vous pouvez créer une maquette qui nécessite la méthode à appeler une fois et retourne un nouvel objet Data:

var testService = mockery.NewMock<IService>(); 
Expect 
    .Once 
    .On(testService) 
    .Method("GetService") 
    .WithNoArguments() 
    .Will(
     Return.Value(new Data()); 

A la fin du test, appelez mockery.VerifyAllExpectationsHaveBeenMet() pour vous assurer que la méthode GetData a bien été appelée. P.S .: ne confondez pas le projet "NMock2" avec le "NMock RC2", qui est aussi appelé "nmock2" sur sourceforge. NMock2-the-project semble avoir remplacé NMock.

1

Cela peut également être quelque chose - MockingBird. Regarde utile.

0

À mon lieu de travail, nous utilisons Typemock et nUnit pour nos tests unitaires.

Questions connexes