2011-02-08 4 views
5

저는 회사 외부의 클라이언트가 소비하게 될 웹 서비스 (HTTP 기반)를 노출시키는 WCF 프로젝트를 개발했습니다. 지속적인 통합을 위해 TFS 2010을 사용할 계획입니다.WCF 프로젝트의 통합 테스트는 어떻게해야합니까?

저는 지속적인 통합 및 통합 테스트를하고 싶습니다.

내 질문은 : 통합 테스트를하고

-does 내가 프로덕션 환경을 모방 한 테스트 환경을 만들 필요가 있다는 것을 의미? - 또는 난 그냥 mock에 의존하지 않고 내 단위 테스트 도구에서 내 WCF, 데이터베이스 및 기타 개체를 호출 할 필요가 있다는 것을 의미합니까? 예 :

[TestClass] 
public class ServiceIntegrationTest 
{ 
    private static ServiceHost serviceHost; 

    [ClassInitialize] 
    public static void MyClassInitialize(TestContext testContext) 
    { 
     serviceHost = new ServiceHost(typeof(Service1), new [] { new Uri("http://127.0.0.1:8001/") }); 
     serviceHost.AddServiceEndpoint(typeof(IService1), new BasicHttpBinding(), "Service1"); 
     serviceHost.Open(); 
    } 

- 정말 이것을 수행하는 방법을 모르겠다. - 이것을 수행하는 방법에 대한 실제 .NET (WCF) 프로젝트의 자습서가 있습니까?

답변

2

저는 mock 및 나머지 테스트를 통해 단위 테스트를 올바르게 수행하는 방법에 대한 전문가가 아니지만 WCF/데이터베이스 백엔드와의 통합 테스트에 대한 경험을 공유 할 수 있습니다.

기본적으로 모든 시작 코드를 처리하기 위해 싱글 톤을 사용했습니다. 즉, MyClassInitialize 메서드는 서비스 호스트/데이터베이스가 가동되어 실행되도록하는 정적 메서드를 호출합니다. 그렇게하면 단위 테스트 세트마다 백엔드를 설정하거나 해체하지 않아도됩니다.

[ClassInitialize] 
public static void MyClassInitialize(TestContext testContext) 
{ 
    GlobalBackend.EnsureStarted(); 
} 

온라인으로 예제를 모르는 경우, 더 많은 검색을해야 할 것입니다.

테스트를 작성할 때 어떤 세분성이 필요한지에 대해 통합 테스트에 대해 이야기했습니다. 아마 실제 데이터베이스에 첨부 된 서비스 호출을 테스트하려는 것 같습니다. 서비스에 구워진 CRUD 기능이 있다고 가정하면, 단위 테스트 (이 경우 통합 테스트)에서 위젯 (또는 기타)을 작성한 다음 loadWidget 호출을 수행하여 위젯이 올바르게 작성되었는지 확인할 수 있습니다.

하나의 단위 테스트에서 수행 할 테스트 (통합 테스팅을 수행하든 세분화 된 단위 테스트를 수행 하느냐에 따라 다름)는 많은 서적을 채울 수있는 주제입니다.

편집 : AssemblyCleanup attribute

MSDN 페이지 : 당신은 또한 데이터베이스/서비스의 일부 정리/종료 할 필요가 있습니다. 그냥 시동 모든 코드를 넣어 이어질 수 물론

[AssemblyCleanup()] 
public static void AssemblyCleanup() 
{ 
    GlobalBackend.ShutDown(); 
} 

: 지금은 더 명확하게 기억하고있어 그래서

[AssemblyInitialize()] 
public static void AssemblyInit(TestContext context) 
{ 
     GlobalBackend.EnsureStarted(); 
} 

- 우리는 결국이 일을 결국 (적은 코드)

+0

와우. 이 정교한 대답에 감사드립니다. – Attilah

관련 문제