Модульный тест WCF - PullRequest
       48

Модульный тест WCF

36 голосов
/ 30 сентября 2008

Как провести модульное тестирование сервисов WCF? Доступны ли инструменты сторонних производителей?

Ответы [ 8 ]

26 голосов
/ 30 сентября 2008

Как говорит aku, если вы тестируете сервисные методы (то есть поведение кода), то вы можете тестировать их напрямую и обходить инфраструктуру WCF. Конечно, если ваш код зависит от классов контекста WCF (например, OperationContext), тогда я предлагаю ввести обертки во многом аналогично ASP.NET MVC для HttpContext.

Для тестирования подключения это будет зависеть от типа настроенных вами конечных точек. В некоторых случаях вы можете просто самостоятельно разместить свою службу WCF в модульном тесте (как при работе со службой Windows WCF) и протестировать его.

Однако вам может потребоваться ускорить веб-сервер разработки ASP.NET или даже IIS, если вы хотите проверить поведение WCF, характерное для этих сред размещения (т. Е. SSL, методы аутентификации). Это сложно и может начать предъявлять требования к конфигурации каждого компьютера разработчика и серверов сборки, но выполнимо.

22 голосов
/ 17 февраля 2011

Я думаю, что лучший подход - это отдельно проверить все проблемы; тестирование соединения, клиентская библиотека (прокси) и вызовы сервисных методов. Насмешка и внедрение зависимостей - это хороший способ независимой проверки подключения и поведения сервиса, но я сомневаюсь, что он сможет обойти тестирование конечных точек, зависящее от промежуточного программного обеспечения.

Вы можете создать сервисный хост в своем тесте (самостоятельно размещенный) и загрузить свой сервис. После того, как вы настроите свои конечные точки, вы можете подключиться к ним с помощью клиентских прокси. Это должно работать с простыми HTTP и WSHTTP. В вашем модульном тесте вам необходимо создать ссылку на службу. Затем вы можете создать хост и связать ваш клиент с тестовым хостом вместе. Я хотел бы попытаться избежать каких-либо тестов, используя "WCF Service Host", также известный как WcfSvcHost. (Я упоминаю об этом только потому, что некоторые люди ссылались на утилиты Visual Studio; это будет работать только в том случае, если вы будете запускать тесты только из своей IDE.)

Если вам нужно проверить экзотические сценарии аутентификации или конечные точки, которые используют специальное промежуточное программное обеспечение, вам нужно будет создать тесты с использованием промежуточного программного обеспечения. Для простых проверок работоспособности и т. Д. Достаточно использовать собственный хостинг. Зависимое от промежуточного ПО тестирование может вызвать проблемы с тестовым развертыванием, если вы используете сервер сборки.

Под конечными точками, зависящими от промежуточного программного обеспечения, я подразумеваю конечные точки, которые используют, например, MOM (MSMQ, RabbitMQ и т. Д.) Или действительно экзотические протоколы и т. Д. Возможно, тестирование прокси-клиентов клиента с помощью собственного макета и тестирование экзотических конечных точек отдельно идти.

Если вы хотите использовать внедрение зависимостей, есть несколько довольно сложных сред, которые предоставляют функции «абстрагирования служб», которые позволяют вводить фиктивные службы и т. Д. Я использовал Spring.NET с WCF несколько раз. В замке Виндзор также есть WCF.

Пример собственного теста:

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

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

12 голосов
/ 30 сентября 2008

Что именно вы хотите проверить? Возможности подключения или обслуживания?

Отличительной особенностью WCF является то, что вы можете просто определять интерфейсы (ошибки, контракты) и тестировать их как обычный код. Тогда вы можете предположить, что они будут работать через любой тип соединения, поддерживаемый WCF.

Связь можно проверить, разместив свой сервис непосредственно в UT или на веб-сервере разработки.

Что касается инструментов, у вас есть тонны фреймворков для модульного тестирования: NUnit, встроенные тесты в Visual Studio, xUnit и т. Д. И т. Д.

Вы можете загрузить " Учебный комплект Visual Studio 2008 и .NET Framework 3.5 " и " Учебный комплект по .NET Framework 3.5 ", если я правильно помню, были образцы для модуля WCF Тесты

5 голосов
/ 30 сентября 2008

Если кто-то действительно хочет тестировать сервисы WCF, лучше всего пойти на интеграционные тесты, которые фактически выполняют часть соединения клиент-сервер.

4 голосов
/ 01 октября 2008

Если вы хотите протестировать действующую работающую службу, тогда SoapUI бесплатен и имеет несколько отличных функций. Единственное предостережение в том, что я пробовал его только с привязкой Basic HTTP.

2 голосов
/ 12 апреля 2009

Typemock Isolator - инструмент для модульного тестирования wcf services , среди прочего ...

2 голосов
/ 30 сентября 2008

Вы можете использовать Typemock Isolator для этого. Вот несколько постов по вопросу тестирования клиентской стороны и серверной стороны . Вы можете сделать это без какой-либо зависимости, включая файл конфигурации.

Гил Зильберфельд Typemock

0 голосов
/ 02 октября 2008

Я видел SOA Test , который использовался для оценки тестов производительности и масштабируемости служб WCF, если это то, что вам нужно. У меня нет информации о стоимости или лицензировании.

В нашем случае мы собрали сообщения из нашего пользовательского интерфейса, чтобы выполнить автоматическое тестирование.

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