ASP.NET Pruebas unitarias WebAPI con Solicitud.CreateResponse
Estoy tratando de escribir algunas pruebas unitarias para mi ApiController y me enfrenté a algunos problemas. Hay un buen método de extensión llamado Request.CreateResponse que ayuda mucho a generar respuesta.
public HttpResponseMessage Post(Product product)
{
var createdProduct = repo.Add(product);
return this.Request.CreateResponse(HttpStatusCode.Created, createdProduct);
}
¿Hay alguna manera de simular CreateResponse sin usar simulaciones parciales o el uso directo de " new HttpResponseMessage (...)"?
4 answers
Otra forma de resolver esto es hacer lo siguiente:
controller.Request = new HttpRequestMessage();
controller.Request.Properties.Add(HttpPropertyKeys.HttpConfigurationKey,
new HttpConfiguration());
Si está actualizando a webapi 5.0, entonces necesitará cambiar esto a:
controller.Request = new HttpRequestMessage();
controller.Request.SetConfiguration(new HttpConfiguration());
La razón por la que necesita hacer esto es porque tiene que tener Request
rellenado en el controlador de lo contrario los métodos de extensión en Request
no funcionarán. También debe tener un HttpConfiguration
establecido en la Solicitud, de lo contrario el enrutamiento y otras partes de la canalización no funcionarán correctamente.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-20 08:31:01
Puede configurar el objeto controlador para la capacidad de prueba de la siguiente manera:
var config = new HttpConfiguration();
var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost/api/products");
var route = config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}");
var routeData = new HttpRouteData(route, new HttpRouteValueDictionary { { "controller", "products" } });
controller.ControllerContext = new HttpControllerContext(config, routeData, request);
controller.Request = request;
controller.Request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config;
Copiado de la publicación completa del blog de Peter Provost sobre Pruebas unitarias ASP.NET Web API .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-20 08:58:21
WebAPI 1 aquí con un problema similar usando VB.
Me las arreglé para respuestas híbridas aquí para hacer que esto funcione tan simple como esto:
Dim request As HttpRequestMessage = New HttpRequestMessage()
Return request.CreateResponse(HttpStatusCode.BadRequest, myCustomClassObject, GlobalConfiguration.Configuration)
Solo publicando en caso de que ayude a alguien.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-15 15:34:19
En su clase de prueba, cree una instancia de la clase controller.
por ejemplo var customerController= new CustomerController();
customerController.Request = new HttpRequestMessage();
customerController.Request.Properties.Add(HttpPropertyKeys.HttpConfigurationKey, new HttpConfiguration());
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-12 16:44:26