Tests unitaires / Test d'intégration de l'API Web avec HttpClient dans Visual Studio 2013
Je vais avoir un moment difficile essayer de tester mon API contrôleur avec Visual Studio 2013. Ma seule solution a une API Web de Projet et un projet de Test. Dans mon projet de test, j'ai une Unité de Test avec ceci:
[TestMethod]
public void GetProduct()
{
HttpConfiguration config = new HttpConfiguration();
HttpServer _server = new HttpServer(config);
var client = new HttpClient(_server);
var request = new HttpRequestMessage
{
RequestUri = new Uri("http://localhost:50892/api/product/hello"),
Method = HttpMethod.Get
};
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
using (var response = client.SendAsync(request).Result)
{
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
var test = response.Content.ReadAsAsync<CollectionListDTO>().Result;
}
}
Je reçois une erreur 404. J'ai essayé de lancer mon API avec une seule instance de Visual Studio (IIS Express), et en essayant de corriger de cette Unité de Test dans une autre instance. Mais pas de chance. J'ai vérifié que je peux mettre cette URL dans un navigateur (quand on Visual Studio est de débogage) et je vois ma réponse JSON. Mais je ne peux pas comprendre comment le faire fonctionner avec mon test unitaire et HttpClient
. J'ai essayé de trouver des exemples en ligne mais n'arrive pas à en trouver un. Quelqu'un peut-il aider?
Mise à JOUR 1:
J'ai essayé d'ajouter une route, mais rien ne s'est passé.
HttpConfiguration config = new HttpConfiguration();
//Added this line
config.Routes.MapHttpRoute(name: "Default", routeTemplate: "api/product/hello/");
HttpServer _server = new HttpServer(config);
var client = new HttpClient(_server);
[...rest of code is the same]
Voici mon API Contrôleur
[HttpGet]
[Route("api/product/hello/")]
public IHttpActionResult Hello()
{
return Ok();
}
Mise à JOUR de la Résolution:
J'ai été en mesure de le faire fonctionner, si j'ai de nouvelles HttpClient
sans HttpServer
objet. J'ai toujours besoin d'avoir deux instances de VS courir si. 1 l'exécution de mon code API et un autre pour exécuter le Test de l'Unité.
Ici est une méthode de travail.
[TestMethod]
public void Works()
{
var client = new HttpClient(); //no HttpServer
var request = new HttpRequestMessage
{
RequestUri = new Uri("http://localhost:50892/api/product/hello"),
Method = HttpMethod.Get
};
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
using (var response = client.SendAsync(request).Result)
{
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
}
}
Ce que quelqu'un sait pourquoi ça ne marche pas avec un HttpServer
et un HttpConfiguration
passé dans HttpClient
? J'ai vu beaucoup d'exemples d'utilisation de ce.
source d'informationauteur duyn9uyen
Vous devez vous connecter pour publier un commentaire.
Le référencement de l'article suivant, j'ai pu faire...
ASP.NET l'API Web tests d'intégration avec en mémoire l'hébergement
en travaillant avec un
HttpServer
et unHttpConfiguration
passé dansHttpClient
. Dans l'exemple suivant, j'ai créé un simpleApiController
qui utilise l'attribut de routage. J'ai configuré leHttpConfiguration
à la carte attribut parcours puis il passa à la nouvelleHttpServer
. LeHttpClient
pouvez ensuite utiliser le serveur configuré pour faire de test d'intégration des appels vers le serveur de test.Il n'y avait pas besoin d'avoir une autre instance de VS en cours d'exécution de test d'intégration du contrôleur.
La suite de la version simplifiée du test travaillé ainsi
Dans votre cas, vous devez vous assurer que vous configurez le serveur pour correspondre à votre site web de l'api de configuration. Cela signifie que vous devez enregistrer votre api routes avec la
HttpConfiguration
objet.Mise en œuvre avec GET/POST Tests que j'ai utilisé -