2010-05-18 73 views
3

我正在嘗試使用TDD爲System.ServiceModel.ObjectContext開發擴展(IExtension<OperationContext>)。該擴展將被用作終身管理器的存儲器,以便與溫莎城堡一起使用。單元測試用於WCF服務的IExtension <OperationContext>

問題在於抽象(嘲諷)OperationContext。由於它是一個在運行時自動創建的靜態對象,我不知道如何模擬它(沒有TypeMock - 我沒有)。

如果我提供了一個實現IChannelFactory的通道對象,OperationContext可以被刷新,但是 - 這個接口是非常複雜的,我不知道我需要在存根中實現什麼東西才能正常工作。

託管服務並調用它不填充的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); 
    } 

任何提示嗎?

+2

你看着城堡溫莎WCF設施,而不是做了很多這方面的工作你自己嗎? – 2010-05-18 12:43:39

回答

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 2010-09-16 16:06:23