Estoy intentando configurar una prueba con NUnit para realizar algunas pruebas de integración de controladores ASP.NET WebApi. He encontrado un par de artículos sobre el uso del Hosting In-Memory usando HttpServer que parece simplificar las cosas al no necesitar un servidor web que aloje todo.Uso de NUnit para realizar pruebas de integración con controladores ASP.NET WebApi
El problema es la única respuesta alguna vez 404-no se encuentra.
El controlador está funcionando cuando se prueba manualmente a través de un navegador o Fiddler. La definición de ruta fue copiada del sitio de trabajo. El proyecto de prueba hace referencia al proyecto api y el dll se copia en la misma carpeta que las pruebas.
Gracias de antemano.
Aquí está la clase de prueba
[TestFixture]
public class InMemoryTests
{
private HttpServer Server;
private string UrlBase = "http://some.server/";
[TestFixtureSetUp]
public void Setup()
{
var config = new HttpConfiguration();
config.Routes.MapHttpRoute(name: "Default", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional });
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
Server = new HttpServer(config);
}
[Test]
public void GetOrderStatus()
{
var client = new HttpClient(Server);
var request = createRequest("api/Orders/GetOrderStatus?companyCode=001&orderNumber=1234", "application/json", HttpMethod.Get);
using (HttpResponseMessage response = client.SendAsync(request).Result)
{
Assert.IsNotNull(response);
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
Assert.NotNull(response.Content);
}
}
private HttpRequestMessage createRequest(string url, string mthv, HttpMethod method)
{
var request = new HttpRequestMessage();
request.RequestUri = new Uri(UrlBase + url);
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(mthv));
request.Method = method;
return request;
}
private HttpRequestMessage createRequest<T>(string url, string mthv, HttpMethod method, T content, MediaTypeFormatter formatter) where T : class
{
HttpRequestMessage request = createRequest(url, mthv, method);
request.Content = new ObjectContent<T>(content, formatter);
return request;
}
public void Dispose()
{
if (Server != null)
{
Server.Dispose();
}
}
}
esto se ve bien. Difícil de decir sin ver el controlador. ¿Podría publicar la definición para esta acción/api/Orders/GetOrderStatus? CompanyCode = 001 & orderNumber = 1234? –
Nada realmente especial sobre el controlador. Todo funciona cuando se prueba manualmente. También obtengo el mismo resultado sin importar qué controlador pruebo. – Rick