2

Я хочу, чтобы мои интеграционные тесты выполнялись при каждой фиксации в TeamCity. Каков хороший способ заставить мой WCF-сервис автоматически запускаться для тестов? Служба WCF является частью тестируемого решения.Тестирование интеграции WCF в TeamCity

В настоящее время я сам принимаю обслуживание в тестах.

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

Но в этом случае я не могу применить фактический конфигурационный файл IIS. Я мог бы дублировать настройки с помощью кода, но предпочел бы.

Каковы наилучшие методы непрерывной интеграции и тестирования WCF?

Примечание: Я видел WCFStorm и SoupUI, но они основаны на графическом интерфейсе.

ответ

3

Я создаю класс-хозяин службы в своем проекте испытаний, который на AssemblyInitialize тестового проекта сам содержит службу, которую я хочу вызвать.

[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(); 
      } 
     } 
    } 

В тесте я использую ChannelFactory для вызова службы. Затем я закрываю службу на 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); 
      } 

Дайте тестовый проект свой собственный App.config файл с соответствующими параметрами, так что, когда он принимает это имеет отношение к тестовой среде. Это дает вам автоматическую проверку черного ящика. Я также использую Mocks для изоляции части сервиса, которую я хочу проверить.