WebAPI 컨트롤러를 테스트하기위한 기초로 사용하려는 통합 테스트가 있습니다.단위 테스트 시나리오에서 asp.net WebApi를 사용하는 HttpClient
처음에는 자체 호스트 모드에서 WebAPI를 설정하고 로컬 HTTP를 통해 엔드 투 엔드 테스트를 수행해야한다고 생각했습니다.
그러나 나중에 WebApiContrib 프로젝트의 테스트를 통해 WebAPI 컨트롤러에 대한 올바른 서비스 경로로 HttpServer를 설정하여 HttpClient를 설정할 수 있음을 알았습니다. 자체 호스트 모드에서 WebApi를 설정하지 않고 컨트롤러를 테스트 할 수있는 것 같습니다. 클라이언트의 요청에 도메인 이름을 넣을 수 있으며 HttpClient는 자동으로 올바른 컨트롤러에 바인딩하는 것처럼 보입니다.
일부 로컬 프로세스 통신을 사용하거나 서버가 동일한 앱 도메인에 있으므로 리플렉션을 사용한다는 '보기'가 발생하여 HTTP 전송이 여기에서 발생합니까? 후드에서 무슨 일이 일어나고 있습니까?
코드 :
[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;
}
그래서 핸들러에 직접 호출하는 방법을 어떻게 알 수 있습니까? HttpServer도 네트워크 연결에 사용되지 않습니까? – jaffa
@jaffa HttpClient는 모든 요청을 제공받은 HttpMessageHandler로 보냅니다. HttpServer는 모든 네트워킹 작업을 처리하는 호스트에 위치합니다. IIS, WCF 자체 호스트 또는 다른 Owin 호스트. –