J'essaie d'écrire des tests unitaires pour mon ApiController et j'ai rencontré des problèmes. Il existe une méthode d'extension intéressante appelée Request.CreateResponse qui aide beaucoup à générer une réponse.
public HttpResponseMessage Post(Product product)
{
var createdProduct = repo.Add(product);
return this.Request.CreateResponse(HttpStatusCode.Created, createdProduct);
}
Existe-t-il un moyen de se moquer de CreateResponse sans utiliser de simulations partielles ou d'utiliser directement "new HttpResponseMessage (...)"?
CreateResponse
? Pourquoi ne pas affirmer sur les propriétés renvoyéesHttpResponseMessage
Content
etStatusCode
que les valeurs correctes sont définies?Réponses:
Une autre façon de résoudre ce problème est de faire ce qui suit:
Si vous effectuez une mise à niveau vers webapi 5.0, vous devrez changer cela en:
La raison pour laquelle vous devez le faire est que vous devez avoir
Request
renseigné le contrôleur, sinon les méthodes d'extensionRequest
ne fonctionneront pas. Vous devez également avoir unHttpConfiguration
ensemble sur la demande, sinon le routage et d'autres parties du pipeline ne fonctionneront pas correctement.la source
Vous pouvez configurer l'objet contrôleur pour la testabilité comme ceci:
Copié de l'article de blog complet de Peter Provost sur l' API Web ASP.NET de test unitaire .
la source
Pour l'API Web 2, vous pouvez simplement ajouter
Ainsi
Voir ici pour plus d'informations.
la source
WebAPI 1 ici avec un problème similaire en utilisant VB.
J'ai réussi à des réponses hybrides ici pour que cela fonctionne aussi simple que ceci:
Juste poster au cas où cela aiderait quelqu'un.
la source
Dans votre classe de test, créez une instance de la classe de contrôleur. par exemple
var customerController= new CustomerController();
la source