web-dev-qa-db-fra.com

Test de l'unité WCF

Comment passer des services de WCF de test? Des outils tiers disponibles?

38
user11039

Comme indique AKU, si vous testez des méthodes de service (c.-à-d. Comportement de code), vous pouvez le tester directement et contourner l'infrastructure de la WCF. Bien sûr, si votre code dépend des classes de contexte de la WCF (comme OperationContext), je suggère d'introduire des emballages beaucoup comme ASP.NET MVC pour httpContext.

Pour tester la connectivité, cela dépendra du type de critères de fin que vous avez configuré. Dans certains cas, vous pouvez simplement héberger votre service WCF dans le test de l'unité (comme vous le feriez avec un service Windows WCF) et testez cela.

Cependant, vous devrez peut-être faire tourner le serveur Web de développement ASP.NET ou même IIS Si vous souhaitez tester le comportement de la WCF spécifique à ces environnements d'hébergement (IE SSL, méthodes d'authentification). Cela devient difficile. Et peut commencer à effectuer des demandes sur la configuration de la machine de développement de tous et des serveurs de construction mais est faisable.

26
Jason Stangroome

Je pense que la meilleure approche consiste à tester séparément toutes les préoccupations; Connectivité des tests, CLIENT LIB (Proxies) et les appels de méthode de service. L'injection de moqueur et de dépendance est un bon moyen de tester la connectivité et le comportement de service de manière autonome, mais je doute que cela puisse passer autour des tests d'extrémité dépendants du middleware.

Vous pouvez créer un hôte de service dans votre test (auto-hébergé) et charger votre service. Une fois que vous avez configuré vos points de terminaison, vous pouvez vous connecter à celui-ci à l'aide de vos proxy clients. Cela devrait fonctionner avec de simples http et wshttp. Dans votre test de l'unité, vous devez créer une référence de service à votre service. Ensuite, vous pouvez créer un hôte et filer votre client avec l'hôte de test ensemble. J'essaierais d'éviter tout tests à l'aide de l'hôte "Service WCF" AKA WCFSVCHOST. (Je ne le mentionne que parce que certaines personnes ont évoqué les utils de studio visuels; qui ne fonctionneront que si vous ne exécutez que des tests de votre IDE.)

Si vous devez vérifier des scénarios d'authentification exotiques ou des points de terminaison qui utilisent des middleware spéciaux, vous devrez créer des tests à l'aide du middleware. Pour des contrôles simples de santé mentale, etc. L'utilisation d'auto-hébergement est suffisante. Les tests dépendants du middleware peuvent provoquer des problèmes de déploiement de test si vous utilisez un serveur de construction.

Par points d'extrémité dépendants du middleware, je veux dire des points finaux qui utilisent par exemple des mamans (MSMQ, la Rabbitmq, etc.) ou des protocoles vraiment exotiques, etc., ce qui a peut-être testé les proxy de clients avec une simulation auto-hébergée et tester les points d'extrémité exotiques est la voie à suivre.

Si vous souhaitez utiliser une injection de dépendance, il existe quelques faits assez sophistiqués qui fournissent des fonctionnalités "abstraction de service" qui vous permettent d'injecter des services de simulation, etc. J'ai utilisé Spring.Net avec WCF plusieurs fois. Le château Windsor a également des installations de WCF.

Exemple de test auto-hébergé:

    ServiceHost serviceHost = null;

    try
    {
        var baseAddress = new Uri("http://localhost:8000/TestService");
        serviceHost = new ServiceHost(typeof (ServiceClass), baseAddress);
        Binding binding = new WSHttpBinding();
        var address = new EndpointAddress("http://localhost:8000/TestService/MyService");
        var endpoint = serviceHost
            .AddServiceEndpoint(typeof (IServiceContract), binding, address.Uri);

        var smb = new ServiceMetadataBehavior {HttpGetEnabled = true};
        serviceHost.Description.Behaviors.Add(smb);

        using (var client = new ProxyClient(endpoint.Name, endpoint.Address))
        {
            endpoint.Name = client.Endpoint.Name;

            serviceHost.Open();

            // ... magic happens 
        }

        serviceHost.Close();
    }
    catch (Exception ex)
    {
        // ... tests
    }
    finally
    {
        if (serviceHost != null)
        {
            ((IDisposable) serviceHost).Dispose();
        }
    }

Je voudrais souligner que les outils de test fonctionnels ne sont pas identiques aux outils de test unitaire. Les tests unitaires devraient consister à décomposer votre test dans un tas d'essais indépendants, tandis que les tests fonctionnels sont principalement sur les flux de travail de test à la fin.

22
Jeno Laszlo

Que voulez-vous tester exactement? Méthodes de connectivité ou de service?

Cool chose à propos de la WCF est que vous pouvez simplement définir des interfaces (err, contrat) et les tester en tant que code régulier. Ensuite, vous pouvez supposer qu'ils fonctionneront via n'importe quel type de connexion pris en charge par WCF.

La connectivité peut être testée en hébergeant votre service directement dans UT ou sur le serveur Web de développement.

En ce qui concerne les outils, vous trouverez des tonnes de cadres de test unitaires: Nunit, tests intégrés dans Visual Studio, Xunit, etc.

Vous pouvez télécharger "- Visual Studio 2008 et .NET Framework 3.5 Kit de formation " et " . Kit de formation NET Framework 3.5 " Si je me rappelle correctement, il y avait des échantillons pour les tests de l'unité WCF

12
aku

Si l'on veut vraiment tester les services de WCF, il est préférable d'accéder à des tests d'intégration qui exercent réellement la partie de connectivité client-serveur.

5
cruizer

Si vous souhaitez tester le service de course réel, alors SOPUI est gratuit et possède d'excellentes fonctionnalités. La seule mise en garde est que je n'ai essayé que par la liaison HTTP de base.

4
Thomas Bratt

Typemock Isolator est un outil pour les tests d'unités Services WCF , entre autres choses ...

2
Brian

Vous pouvez utiliser l'isolateur de Typemock pour le faire. Voici quelques postes sur la question des tests sur le bouton côté client et le côté serveur . Vous pouvez le faire sans dépendance, y compris un fichier de configuration.

Gil Zilberfeld Typemock

2
Gil Zilberfeld

J'ai vu Test SOA utilisé pour évaluer les tests de performance et d'évolutivité sur les services de la WCF, si c'est ce que vous recherchez. Je n'ai aucune information sur le coût ou le loissice.

Dans notre cas, nous avons capturé les messages de notre UI afin d'effectuer des tests automatisés.

0
Berkshire