Мне нелегко пытаться протестировать мой контроллер API с помощью Visual Studio 2013. Мое одно решение имеет проект веб-API и проект тестирования. В моем тестовом проекте у меня есть Unit Test с этим:
[TestMethod]
public void GetProduct()
{
HttpConfiguration config = new HttpConfiguration();
HttpServer _server = new HttpServer(config);
var client = new HttpClient(_server);
var request = new HttpRequestMessage
{
RequestUri = new Uri("http://localhost:50892/api/product/hello"),
Method = HttpMethod.Get
};
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
using (var response = client.SendAsync(request).Result)
{
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
var test = response.Content.ReadAsAsync<CollectionListDTO>().Result;
}
}
Я продолжаю получать 404. Я попытался запустить свой API с одним экземпляром Visual Studio (IIS Express) и попытаться отладить этот Unit Test в другом экземпляре. Но не повезло. Я проверил, что могу поместить этот URL в браузер (когда одна Visual Studio отлаживается), и я вижу ответ JSON. Но я не могу понять, как заставить его работать с моими Unit Test и HttpClient
. Я пытался найти примеры в Интернете, но, похоже, не нашел их. Может кто-нибудь помочь?
ОБНОВЛЕНИЕ 1: Я попытался добавить маршрут, но ничего не произошло.
HttpConfiguration config = new HttpConfiguration();
// Added this line
config.Routes.MapHttpRoute(name: "Default", routeTemplate: "api/product/hello/");
HttpServer _server = new HttpServer(config);
var client = new HttpClient(_server);
[...rest of code is the same]
Вот мой API-контроллер
[HttpGet]
[Route("api/product/hello/")]
public IHttpActionResult Hello()
{
return Ok();
}
ОБНОВЛЕНИЕ Разрешение:
Я смог заставить его работать, если я обновляю HttpClient
без объекта HttpServer
. Тем не менее, мне все равно нужно иметь два экземпляра VS. 1 запустил мой код API, а другой - для запуска Unit Test.
Вот рабочий метод.
[TestMethod]
public void Works()
{
var client = new HttpClient(); // no HttpServer
var request = new HttpRequestMessage
{
RequestUri = new Uri("http://localhost:50892/api/product/hello"),
Method = HttpMethod.Get
};
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
using (var response = client.SendAsync(request).Result)
{
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
}
}
Кто-нибудь знает, почему он не работает с HttpServer
и a HttpConfiguration
, переданными в HttpClient
? Я видел много примеров, которые используют это.