Ho un test di integrazione che volevo utilizzare come base per testare i miei controller WebAPI con.HttpClient con asp.net WebApi nello scenario di test di unità
Inizialmente pensavo di dover configurare WebAPI in modalità self-host ed eseguire test end-to-end su Http locale.
Tuttavia mi sono reso conto in seguito osservando i test nel progetto WebApiContrib che è possibile impostare un HttpClient con un HttpServer impostato con la corretta route di servizio al controller WebAPI. Mi sembra di poter testare i controller senza configurare WebApi in modalità self-host. Posso inserire qualsiasi nome di dominio nella richiesta sul client e HttpClient sembra associarsi automaticamente al controller corretto.
C'è qualche trasporto Http che si verifica qui, utilizzando alcune comunicazioni interprocessuali locali o semplicemente "vedendo" che il server si trova nello stesso dominio dell'app e quindi utilizzando la riflessione? Che cosa sta succedendo sotto il cofano affinché ciò accada? Codice
:
[Test]
public void Test_WebApi_Controller()
{
Assembly.Load("myproj.Web");
var prodServiceMock = new Mock<IProductService>();
ObjectFactory.Initialize(x => x.For<IProductService>().Use(prodServiceMock.Object));
var config = new HttpConfiguration();
config.Routes.MapHttpRoute("default", "webapi/{controller}/{id}", new { id = RouteParameter.Optional });
config.ServiceResolver.SetResolver(new WebApiDependencyResolver());
var server = new HttpServer(config);
var client = new HttpClient(server);
var response = client.GetAsync("http://anything.com/webapi/product").Result;
}
Quindi, come fa a sapere come effettuare la chiamata diretta al gestore? HttpServer non è utilizzato anche per le connessioni di rete? – jaffa
@jaffa HttpClient invia tutte le richieste a HttpMessageHandler che gli è stata fornita. HttpServer si trova su un host che gestisce tutte le cose di networking. IIS, Self-host WCF o qualche altro host Owin. –