2008-09-30 5 views

ответ

26

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

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

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

+2

Знаете ли вы, как использовать MVC3 в качестве обертки для модульного тестирования? – 2012-01-27 19:30:18

+0

[Здесь] (https://weblogs.asp.net/cibrax/unit-tests-for-wcf) конкретный пример издевательств OperationContext. – user3613932 2017-05-17 22:16:04

11

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

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

Возможность подключения может быть протестирована путем размещения вашего сервиса непосредственно в UT или на веб-сервере разработки.

Что касается инструментов, то есть тонны единичных рамок тестирования: NUnit, встроенные тесты в Visual Studio, XUnit и т.д., и т.д.

Вы можете скачать «Visual Studio 2008 and .NET Framework 3.5 Training Kit» и «.NET Framework 3.5 Enhancements Training Kit», если я помню правильно были образцы для модульных тестов WCF

5

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

2

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

Gil Zilberfeld Typemock

4

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

0

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

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

2

Typemock Изолятор представляет собой инструмент для модульного тестирования wcf services, amoung других вещей ...

22

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

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

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

Консоли, зависимые от промежуточного программного обеспечения. Я имею в виду конечные точки, которые используют, например, 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(); 
     } 
    } 

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

Смежные вопросы