2013-02-05 1 views
11

웹 API 프로젝트에서 일부 단위 테스트를 수행하려고합니다. 웹 API 호스팅 환경을 시뮬레이트하겠습니다. 메모리 호스트 (HttpServer) 또는 자체 호스트 (HttpSelfHostServer)를 사용할 수있는 것 같습니다.HttpServer 또는 HttpSelfHostServer를 사용하여 단위 테스트 웹 API

차이점과 어떤 기술이 무엇에 좋은지 궁금하고 이러한 옵션에 대한 제한이 있습니다.

답변

12

엔드 투 엔드 테스트를 위해서는 메모리 호스트에서 사용해야하며 환경의 네트워크 연결을 별도로 테스트해야합니다. 여러 가지 이유를 들어

: 이름에서 알 수 있듯이 메모리 호스트에서

  • 가, 메모리에 완전히 실행되도록, 셀프 호스트가 상승 된 권한으로 실행해야

  • 훨씬 빨라집니다 그래서 여러분의 테스트는 "admin"아이덴터티의 맥락에서 실행되어야합니다. 이것은 바라는 것과는 거리가 멀다. 결과적으로 이러한 프로세스를 높은 권한으로 시작해야하기 때문에 빌드 스크립트 나 PowerShell에서 테스트를 실행하려면 특히 문제가 있습니다. 또한, 테스트를 거친 서버에서이 작업이 수행되어야합니다.

  • 셀프 호스트에서 다른 운영 체제 (개발, 준비, QA, 생산 등)마다 다를 수 있으므로 실제로 테스트하지 않아야하는 특정 운영 체제의 네트워킹 스택을 테스트하게됩니다. 예를 들어 - 주어진 포트를 사용하지 못할 수 있습니다. 결과적으로 테스트를 실행하기 위해 여러 시스템에서 불필요한 디버깅 작업으로 끌릴 수도 있습니다. 그래서 당신은 메모리뿐만 아니라 단지 시험

+4

당신은 할 수 없습니다 -

  • 마지막으로, 자체 호스팅을 사용하여 테스트, 여전히 웹 호스팅 및 그 반대의 경우 서비스가 제대로 실행되는 것은 아닙니다 자체 호스트를 실행하려면 항상 관리자 권한이 필요합니다. 로컬에서 청취하는 경우 관리자가 아닌 관리자로 실행하려면'config.HostNameComparisonMode = System.ServiceModel.HostNameComparisonMode.Exact; '를 추가해야합니다. –

  • +1

    예 좋은 지적 - 그래도 꽤 많은 고통이 있습니다. –

    +0

    Owin'TestServer' 사용을 권장합니다. 링크 : http://www.juliencorioland.net/archives/using-owin-to-test-your-web-api-controllers#.U9cQE2NraM4 – Youngjae