2013-03-07 3 views
2

자체 호스트 구성 기반 통합 테스트 실행 방법을 이해하려고합니다.메모리 HTTP 서버 Asp.net WebAPI

아래 코드에서 내 구성을 WebApiConfig에 등록해야합니까? 등록이나 차이는 없습니다.

전체 파이프 라인이 실제로 테스트되었거나 환상입니까? 이후, 내가 여기에서했던 것처럼 내 자신의 것을 선언하는 대신 내 API에 정의 된 설정과 경로를 사용하지 않는다면 아마도 전체 pipleine을 테스트하지 않을 것입니다.

API를 완전히 테스트 할 수있는 방법이 있습니까? 아래의 코드는 클라이언트 (예 : SelfHosting 등)와 같은 많은 것들을 테스트하는 것입니다. 이것은 나에게 잔인한 것처럼 보인다. 어떤 아이디어?

var config = new HttpSelfHostConfiguration("http://localhost:9090/"); 

       config.Routes.MapHttpRoute("Default", "{api}/{controller}/{id}", new { id = RouteParameter.Optional }); 


      config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always; 

      MyApiProject.WebApiConfig.Register(config); 

      using (var server = new HttpSelfHostServer(config)) 
      { 
       server.OpenAsync().Wait(); 
       using (var client = new HttpClient()) 
       { 
        using (var response = client.PostAsync("http://localhost:9090/api/login", 
              new FormUrlEncodedContent(new List<KeyValuePair<string,string>>                  {  new KeyValuePair<string, strin("Foo","Bar)}), CancellationToken.None).Result) 
        { 
         Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); 
        } 

        using (var response = client.GetAsync("http://localhost:9090/api/login").Result) 
        { 
         Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); 
        } 
       } 
       server.CloseAsync().Wait(); 
      } 

답변

4

컨트롤러를 테스트하려는 경우 더 많은 단위 테스트를 작성하여 테스트 할 수 있습니다. 전체 파이프 라인을 테스트하려는 경우 셀프 호스트를 사용하는 대신 코드가 정상적으로 보입니다. 네트워크 오버 헤드를 절약하는 HttpServer 만 사용할 수 있습니다. 또한 전체 파이프 라인을 테스트하는 경우 라우팅을 테스트하는 새 경로를 추가하는 대신 실제 앱에있는 경로를 사용하는 것이 좋습니다.

또한 웹 API 테스트에 대한 아이디어는 Youssef의 블로그 post을 참조하십시오.

+0

나는 단위 테스트를보고 있지 않다. 그들은 당신이 말한 것처럼 분리되고 목표 화된다. 질문에서 언급 한 테스트에서 API에서 지정한 구성을 사용하는 올바른 방법은 무엇입니까? –

+1

동일한 코드를 호출하면 모든 경로와 다른 것들을 추가 할 수 있습니다. 나는'MyApiProject.WebApiConfig.Register (config);'가 그렇게하고 있다고 믿는다. –