Подтвердить что ты не робот

WCF Unit Test

Как unit test услуги WCF? Доступны ли какие-либо сторонние инструменты?

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Вы можете создать хост службы в своем тесте (самостоятельно) и загрузить службу. После того, как вы настроите свои конечные точки, вы можете подключиться к нему, используя ваши клиентские прокси. Это должно работать с простыми HTTP и WSHTTP. В Unit test вам необходимо создать ссылку на службу для вашей службы. Затем вы можете создать хост и связать своего клиента вместе с тестовым узлом. Я попытался бы избежать любых тестов, используя "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();
        }
    }

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

Ответ 3

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

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

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

Ответ 8

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

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