2010-09-08 2 views
5

À l'aide de Visual Studio 2010, j'ai écrit un simple service WCF et quelques tests d'intégration que je souhaite exécuter. Je construis mon proxy pour les tests à l'exécution dans le code plutôt que d'utiliser la configuration.Lors de l'exécution de mstest sur un service WCF, WcfSvcHost échoue et les tests échouent. Les tests passent lors du débogage

Mes tests passent en débogage mais pas quand ils sont exécutés!

FAIL si elle est exécutée - go Test/Run/Tests dans le contexte actuel (comme le service WCF appelle n'a pas été hébergé)

PASS debug - go test/debug/Tests dans le contexte actuel (car le projet WCF a des Options WCF/Démarrer l'hôte de service WCF lors du débogage d'un autre projet dans la même solution)

Existe-t-il un moyen de démarrer WCFServiceHost lorsque les tests sont exécutés normalement?

Merci, Andy

Test method BulkLoaderIntegrationTests.IntegrationTests.ImportEntries_withGoodPCMs_reportsCreatedOk threw exception: 
    System.ServiceModel.EndpointNotFoundException: Could not connect to net.tcp://localhost:8001/OLELoader. The connection attempt lasted for a time span of 00:00:00.9687686. TCP error code 10061: No connection could be made because the target machine actively refused it 127.0.0.1:8001. ---> System.Net.Sockets.SocketException: No connection could be made because the target machine actively refused it 127.0.0.1:8001 
+0

Pouvez-vous ajouter des messages d'exception? – stephenl

Répondre

4

I désactivé 'Start WCF service Host' lors du débogage d'un autre projet dans la même solution.

J'ai ajouté une méthode statique dans [ClassInitialize] pour "auto-héberger" le service WCF dans le contexte de test pendant la durée du test.

 [ClassInitialize] 
     public static void Init(TestContext t) 
     { 
      IntegrationTests.InitService(); 
     } 

     [ClassCleanup] 
     public static void CleanUp() 
     { 
      IntegrationTests.host.Close();   
     } 

     private static bool ServiceIsStarted = false; 
     private static ServiceHost host; 
     private static void InitService() 
     {   
      if (!ServiceIsStarted) 
      { 
       // Create the ServiceHost. 
       host = new ServiceHost(typeof (OLEImport), 
              new Uri(IntegrationTestHelper.BaseAddress)); 

       // Enable metadata publishing. 
       ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
       smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15; 
       host.Description.Behaviors.Add(smb); 

       host.Open(); 
       ServiceIsStarted = true; 
      } 
     } 
Questions connexes