2

Je souhaite que mes tests d'intégration s'exécutent sur chaque validation dans TeamCity. Quel est le bon moyen de faire fonctionner automatiquement mon service WCF pour les tests? Le service WCF fait partie de la solution testée.Tests d'intégration WCF dans TeamCity

Actuellement, j'auto-héberge le service dans les tests.

host = new ServiceHost(typeof(...), url); 

Mais je ne peux pas appliquer mon fichier de configuration IIS réel dans ce cas. Je pourrais dupliquer les paramètres avec le code, mais je préférerais ne pas. Quelles sont les meilleures pratiques pour l'intégration continue et les tests WCF?

Remarque: J'ai vu le WCFStorm et SoupUI mais ce sont des applications basées sur l'interface graphique.

Répondre

3

Je crée une classe d'hôte de service dans mon projet de tests qui, sur AssemblyInitialize du projet de test, auto-organise le service que je souhaite appeler.

[TestClass] 
    internal class ServiceHost 
    { 
     private static ServiceHost<Service1> m_Host = null; 

     /// <summary> 
     /// Setups the specified context. 
     /// </summary> 
     /// <param name="context">The context.</param> 
     [AssemblyInitialize] 
     public static void Setup(TestContext context) 
     { 
      //comment to run against local consolehost 
      m_Host = new ServiceHost<Service1>(); 
      m_Host.Open(); 
     } 

     /// <summary> 
     /// Tears down. 
     /// </summary> 
     [AssemblyCleanup] 
     public static void TearDown() 
     { 
      if (m_Host != null) 
      { 
       m_Host.Close(); 
      } 
     } 
    } 

Dans le test que j'utilise ChannelFactory pour appeler le service. Je ferme ensuite le service sur AssemblyCleanup.

try 
      { 
       ChannelFactory<IService> factory = new ChannelFactory<IService>("User"); 
       IServiceproxy = factory.CreateChannel(); 
       try 
       { 
        m_IsAuthenticated = proxy.Method(""); 
        // Make sure to close the proxy 
        (proxy as IClientChannel).Close(); 
        Assert.IsTrue(m_IsAuthenticated); 
       } 
       catch 
       { 
        if (proxy != null) 
        { 
         // If the proxy cannot close normally or an exception occurred, abort the proxy call 
         (proxy as IClientChannel).Abort(); 
        } 
        throw; 
       } 
      } 
      catch (Exception ex) 
      { 
       Assert.Fail(ex.Message); 
      } 

Donnez le projet de test son propre fichier App.config avec des paramètres pertinents afin que quand il l'héberge est pertinent pour l'environnement de test. Cela vous donne un test automatisé de boîte noire. J'utilise également Mocks pour isoler la partie du service que je souhaite tester.