Интеграционное тестирование WCF в TeamCity - PullRequest
3 голосов
/ 03 августа 2010

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

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

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

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

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

Примечание. Я видел WCFStorm и SoupUI, ноэто приложения на основе графического интерфейса.

1 Ответ

3 голосов
/ 04 августа 2010

В своем тестовом проекте я создаю хост-класс службы, который в 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 для изоляции той части сервиса, которую я хочу протестировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...