#.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);
}