Supposons que c'est ma méthode d'action
public IHttpActionResult Get(int id)
{
var status = GetSomething(id);
if (status)
{
return Ok();
}
else
{
return NotFound();
}
}
Le test sera
var httpActionResult = controller.Get(1);
Comment puis-je vérifier mon code d'état http après cela?
Réponses:
Voici
Ok()
juste une aide pour le typeOkResult
qui définit l'état de la réponse surHttpStatusCode.Ok
... donc vous pouvez simplement vérifier si l'instance du résultat de votre action est unOkResult
... quelques exemples (écritsXUnit
):la source
Assert.IsInstanceOfType(httpActionResult, typeof(OkResult));
Created<T>(url,content)
sonCreatedNegotiatedContentResult
Created
n'était probablement pas un bon exemple pour uneGet
opération ... j'ai changé le code de statut en un autre maintenant ...OkNegotiatedContentResult<T>
lorsque vous passerez un objet de typeT
àOk()
return new StatusCodeResult((HttpStatusCode)422, this);
Il est temps de ressusciter une question morte
Les réponses actuelles reposent toutes sur la conversion de l'objet de réponse en un type connu. Malheureusement, les réponses ne semblent pas avoir de hiérarchie utilisable ou de chemin de conversion implicite pour que cela fonctionne sans une connaissance approfondie de l'implémentation du contrôleur. Considérer ce qui suit:
Tester la classe:
De l'extérieur de la boîte noire, le flux de réponse est essentiellement le même. Le test doit savoir comment le contrôleur a implémenté l'appel de retour pour le tester de cette manière.
Au lieu de cela, utilisez l'objet HttpResponseMessage de IHttpActionResult renvoyé. Cela garantit que le test peut être cohérent, même lorsque le code du contrôleur peut ne pas être:
la source
new HttpRequestMessage() {Properties = { { HttpPropertyKeys.HttpConfigurationKey, new HttpConfiguration() } }}
C'est la réponse acceptée par Kiran Challa, adaptée pour NUnit;
la source
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));
la source
Si IHttpActionResult contient un objet JSON, par exemple {"token": "A"}, nous pouvons utiliser le code suivant.
la source
Après quelques heures de recherche et d'essais, j'ai finalement compris comment tester complètement mes méthodes Web API 2 qui retournent
IHttpActionResult
et utilisent le middleware OWIN et l'implémentation par défaut d'ASP.NET Identity.Je testerai la
Get()
méthode sur les points suivantsApiController
:Commencez par une classe de base dont toutes les classes de test hériteront:
La
InitializeApiController
méthode contient la viande et les pommes de terre.Maintenant, nous pouvons écrire nos tests pour
AccountController
:Pour que tout fonctionne, vous devrez installer un tas de packages
Microsoft.OWIN.*
etMicrosoft.AspNet.*
, je vais coller monpackages.config
ici:Le test est très simple, mais démontre que tout fonctionne :-)
Bon test!
la source