Asumamos que este es mi método de acción
public IHttpActionResult Get(int id)
{
var status = GetSomething(id);
if (status)
{
return Ok();
}
else
{
return NotFound();
}
}
La prueba será
var httpActionResult = controller.Get(1);
¿Cómo verifico mi código de estado http después de esto?
Respuestas:
Aquí
Ok()
hay solo una ayuda para el tipoOkResult
que establece el estado de respuesta para que seaHttpStatusCode.Ok
... para que pueda verificar si la instancia del resultado de su acción es unOkResult
... algunos ejemplos (escritos enXUnit
):fuente
Assert.IsInstanceOfType(httpActionResult, typeof(OkResult));
Created<T>(url,content)
suCreatedNegotiatedContentResult
Created
no fue un buen ejemplo para unaGet
operación ... Cambié el código de estado a uno diferente ahora ...OkNegotiatedContentResult<T>
cuando pase un objeto de tipoT
aOk()
return new StatusCodeResult((HttpStatusCode)422, this);
Es hora de resucitar una pregunta muerta
Todas las respuestas actuales se basan en convertir el objeto de respuesta en un tipo conocido. Desafortunadamente, las respuestas no parecen tener una jerarquía utilizable o una ruta de conversión implícita para que esto funcione sin un conocimiento íntimo de la implementación del controlador. Considera lo siguiente:
Probar la clase:
Desde fuera del cuadro negro, el flujo de respuesta es esencialmente el mismo. La prueba debe saber cómo el controlador implementó la llamada de retorno para probarla de esta manera.
En su lugar, use el objeto HttpResponseMessage del IHttpActionResult devuelto. Esto asegura que la prueba puede ser consistente, incluso cuando el código del controlador no sea:
fuente
new HttpRequestMessage() {Properties = { { HttpPropertyKeys.HttpConfigurationKey, new HttpConfiguration() } }}
Esta es la respuesta aceptada por Kiran Challa, adaptada para NUnit;
fuente
https://docs.microsoft.com/en-us/aspnet/web-api/overview/testing-and-debugging/unit-testing-controllers-in-web-api#testing-actions-that-return-ihttpactionresult
Assert.IsInstanceOfType (httpActionResult, typeof (OkResult));
fuente
Si IHttpActionResult contiene un objeto JSON, por ejemplo, {"token": "A"}, podemos usar el siguiente código.
fuente
Después de algunas horas de investigación e intentos, finalmente descubrí cómo probar completamente mis métodos Web API 2 que devuelven
IHttpActionResult
y usan el middleware OWIN y la implementación predeterminada de Identidad ASP.NET.Probaré el
Get()
método en lo siguienteApiController
:Comience con una clase base que todas las clases de prueba heredarán de:
El
InitializeApiController
método contiene la carne y las papas.Ahora podemos escribir nuestras pruebas para
AccountController
:Para que todo el trabajo, tendrá que instalar un montón de
Microsoft.OWIN.*
yMicrosoft.AspNet.*
paquetes, voy a pegar a mipackages.config
aquí:La prueba es muy simple, pero demuestra que todo funciona :-)
¡Feliz prueba!
fuente