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

#.net #wcf #unit-testing

#.net #wcf #модульное тестирование

Вопрос:

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

Он создал новый тестовый проект и создал модульный тест.

Я попытался запустить тестовый проект, но я не уверен, каким должно быть UrlToTest значение? Я поместил URL-адрес в службу.

 [TestMethod()]
[HostType("ASP.NET")]
[AspNetDevelopmentServerHost("C:\VS Projects\NetBranch4\"   
    "MobileCheckCapture\MobileCheckCapture", "/")]
// [UrlToTest("http://localhost:45651/")]
[UrlToTest("http://localhost/mobilecc/mobilecc.svc")]
public void AuthenticateUserTest()
{
    // TODO: Initialize to an appropriate value
    MobileCC target = new MobileCC(); 

    // TODO: Initialize to an appropriate value
    string authenticateRequest = string.Empty;

    // TODO: Initialize to an appropriate value
    string expected = string.Empty; 
    string actual;
    actual = target.AuthenticateUser(authenticateRequest);
    Assert.AreEqual(expected, actual);
    Assert.Inconclusive("Verify the correctness of this test method.");
}
 

Ответ №1:

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

ETA: сначала я тестирую логику, потому что часто проблемы с подключением, проблемы с брандмауэром и т. Д. Могут потребовать времени для решения с помощью служб WCF, И я оставляю тестирование последним.

Ответ №2:

HostType, AspNetDevelopmentServerHost и UrlToTest являются параметрами, используемыми для ASP.NET UnitTest, а не WCF. Просто прокомментируйте эти атрибуты, задайте входные параметры и утверждения и запустите тест.

 [TestMethod()]
public void AuthenticateUserTest()
{       
    MobileCC target = new MobileCC(); // TODO: Initialize to an appropriate value   
    string authenticateRequest = string.Empty; // TODO: Initialize to an appropriate value
    string expected = string.Empty; // TODO: Initialize to an appropriate value       string actual;
    actual = target.AuthenticateUser(authenticateRequest);
    Assert.AreEqual(expected, actual);
    Assert.Inconclusive("Verify the correctness of this test method.");
} 
 

Надеюсь, это поможет.

Комментарии:

1. Спасибо, теперь это работает, но я поставил точку останова на actual = target. AuthenticateUser(AuthenticateRequest); он не ломается и позволяет мне отлаживать метод wcf

2. Перейдите в меню Test в VS, выберите «Debug -> Test в текущем контексте». Также есть варианты запуска теста на панелях инструментов Test Tools в VS.

3. Я не вижу опции «Тест в текущем контексте» в меню «Отладка», нужно ли мне заходить в настройки, чтобы настроить его? Спасибо

4. Вы можете сделать две вещи: во-первых, в меню VS перейдите в «Вид -> Панели инструментов» и выберите из списка «Инструменты тестирования» (если он еще не выбран). Как только вы это сделаете, появится новое меню панели инструментов с несколькими зелеными значками, которые выглядят как стрелки, указывающие вправо. Один из них имеет заполненную зеленую стрелку и белый прямоугольник с зеленым кругом посередине. Это тот самый. Во-вторых, в меню VS перейдите в «Test -> Debug». В появившемся списке вы должны увидеть опцию «Тестировать в текущем контексте». Убедитесь, что у вас выбран тест (буквально, у вас открыт тестовый файл, и вы выбрали имя теста).

Ответ №3:

Чтобы успешно запустить test-method для веб-службы, вы должны [HostType("ASP.NET")] вообще удалить атрибут. Также UrlToTest должен содержать URL-адрес только для веб-приложения, а не для файла SVC. Также тестовый метод необходим AspNetDevelopmentServer только в некоторых конкретных случаях.

Если вы размещаете свой SVC на локальном IIS, код метода тестирования будет похож на:

 [TestMethod()]
[UrlToTest("http://localhost/ServiceApp")]
public void ServiceTest()
{
    WcfService target = new WcfService();
    string arg = "test";
    Response actual = target.DoSmth(arg);

    Assert.IsTrue(actual != null);
}