2010-05-18 1 views
3

TDD를 사용하는 System.ServiceModel.ObjectContext에 대한 확장 (IExtension<OperationContext>)을 개발하려고합니다. 이 확장은 평생 관리자가 Windsor Castle과 함께 사용할 수있는 저장소로 사용됩니다.WCF 서비스와 함께 사용하기 위해 IExtension <OperationContext>를 테스트하는 유닛

문제는 OperationContext를 추상화 (조롱)하는 데 있습니다. 런타임 중에 자동으로 생성되는 정적 객체이기 때문에 모의하는 법을 모르겠습니다 (TypeMock이없는 경우 - 내가 갖고 있지 않은 경우).

IChannelFactory를 구현하는 채널 객체를 제공하면 OperationContext를 새로 만들 수 있습니다. 그러나 그 인터페이스는 무서운 복잡성을 가지며 올바르게 작동하려면 어떤 스터프를 구현해야하는지 알지 못합니다.

[TestFixtureSetUp] 
    public void FixtureSetup() 
    { 
     _serviceHost = new TypeResolverServiceHost(typeof(AilDataService)); 
     _serviceHost.AddServiceEndpoint(typeof (IAilDataService), new BasicHttpBinding(), SvcUrl); 
     _serviceHost.Open(); 

     var endpointAddress = new EndpointAddress(SvcUrl); 

     _ailDataService = ChannelFactory<IAilDataService>.CreateChannel(new BasicHttpBinding(), endpointAddress); 
    } 

    [TestFixtureTearDown] 
    public void FixtureCleanup() 
    { 
     _serviceHost.Close(); 
    } 

    [Test] 
    public void Can_Call_Service() 
    { 
     var reply = _ailDataService.GetMovexProductData("169010", new TaskSettings{MovexDatabase = "MVXCDTATST", MovexServer = "SEJULA03"}); 

     Assert.That(reply, Is.Not.Null); 

     // This fails 
     Assert.That(OperationContext.Current!=null); 
    } 

모든 팁 ... 서비스를 호스팅하고 중 하나 OperationContext를 채우지 않습니다 호출?

+2

당신이 성 윈저 WCF 시설 봤어 대신이 많은 자신을 일을하고? –

답변

0

이것은 내가하고 결국 무엇을 :

[TestFixture] 
public class WcfPerSessionLifestyleManagerTests 
{ 
    private const string SvcUrl = "http://localhost:8732/Design_Time_Addresses/JulaAil.DataService.WcfService/AilDataService/"; 

    private TypeResolverServiceHost _serviceHost; 
    private ChannelFactory<IAilDataService> _factory; 
    private IAilDataService _channel; 
    private WindsorContainer _container; 

    [Test] 
    public void Can_Populate_OperationContext_Using_OperationContextScope() 
    { 
     using (new OperationContextScope((IContextChannel) _channel)) 
     { 
      Assert.That(OperationContext.Current, Is.Not.Null); 
     } 
    } 
} 
+1

코드가 올바르지 않습니다. TypeResolverServiceHost는 무엇입니까? 전체 설정, 테스트, 해체를 게시 할 수 있습니까? – Mahol25

관련 문제