Estoy tratando de escribir algunas pruebas unitarias para mi ApiController y enfrenté algunos problemas. Hay un buen método de extensión llamado Request.CreateResponse que ayuda mucho a generar respuestas.
public HttpResponseMessage Post(Product product)
{
var createdProduct = repo.Add(product);
return this.Request.CreateResponse(HttpStatusCode.Created, createdProduct);
}
¿Hay alguna forma de burlarse de CreateResponse sin usar simulacros parciales o el uso directo de "new HttpResponseMessage (...)"?
CreateResponse
? ¿Por qué no afirmar en las propiedades devueltasHttpResponseMessage
Content
yStatusCode
que los valores correctos están establecidos?Respuestas:
Otra forma de resolver esto es hacer lo siguiente:
Si está actualizando a webapi 5.0, deberá cambiar esto a:
La razón por la que necesita hacer esto es porque debe haber
Request
rellenado el controlador; de lo contrario, los métodos de extensiónRequest
no funcionarán. También debe tener unHttpConfiguration
conjunto en la solicitud; de lo contrario, el enrutamiento y otras partes de la tubería no funcionarán correctamente.fuente
Puede configurar el objeto del controlador para la capacidad de prueba de esta manera:
Copiado de la publicación de blog integral de Peter Provost sobre Unit Testing ASP.NET Web API .
fuente
Para Web API 2, simplemente puede agregar
Al igual que
Ver aquí para más información.
fuente
WebAPI 1 aquí con un problema similar al usar VB.
Logré respuestas híbridas aquí para que esto funcione tan simple como esto:
Solo publicar en caso de que ayude a alguien.
fuente
En su clase de prueba, cree una instancia de la clase de controlador. p.ej
var customerController= new CustomerController();
fuente