Ho difficoltà a provare il controller API con Visual Studio 2013. La mia soluzione One ha un progetto API Web e un progetto Test. Nel mio progetto di test, ho una prova di unità con questo:Test delle unità/test di integrazione API Web con HttpClient in Visual Studio 2013
[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;
}
}
Continuo a ricevere un 404. Ho provato a eseguire la mia API con un'istanza di Visual Studio (IIS Express) e a eseguire il debug di questo Test unità in un'altra istanza. Ma senza fortuna. Ho verificato che posso inserire questo URL in un browser (quando Visual Studio esegue il debug) e vedo la mia risposta JSON. Ma non riesco a capire come farlo funzionare con il mio test unitario e HttpClient
. Ho cercato di trovare esempi online ma non riesco a trovarne uno. Qualcuno può aiutare?
UPDATE 1: Ho provato ad aggiungere in un percorso ma non è successo nulla.
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]
Ecco il mio controller API
[HttpGet]
[Route("api/product/hello/")]
public IHttpActionResult Hello()
{
return Ok();
}
UPDATE Risoluzione: ero in grado di farlo funzionare se nuove fino HttpClient
senza un oggetto HttpServer
. Avrei comunque bisogno di avere due istanze di VS in esecuzione. 1 eseguendo il mio codice API e un altro per eseguire il Test unità.
Ecco un metodo di lavoro.
[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);
}
}
Qualcuno sa il motivo per cui non funziona con un HttpServer
e HttpConfiguration
passato in HttpClient
? Ho visto molti esempi che usano questo.
non potrebbe fare la differenza, ma perché non utilizzare [GetAsync] (https://msdn.microsoft.com/en-us/ library/hh158944 (v = vs.118) .aspx) direttamente? –
Stai usando la pipeline OWIN con l'avvio? Potrebbe essere necessario usare 'TestServer'. https://blogs.msdn.microsoft.com/webdev/2013/11/26/unit-testing-owin-applications-using-testserver/ – Nkosi
Non sto utilizzando owin. – duyn9uyen