2009-11-10 101 views
2

這個有點涉及到:調用調用WCF Web服務(.NET C#)的.DLL NUnit的測試

InvalidOperationException while creating wcf web service instance

我有一個.NET C#類庫(DLL)調用一個WCF Web服務。看起來像調用該.DLL的任何.exe文件現在必須在其.EXE.config文件中具有Web服務配置。

因此,舉例來說,如果我寫的NUnit測試,然後做我與web服務PARMS更新NUnit.exe.config。這似乎很難管理。我在這裏錯過了一個重點嗎?任何快捷方式?如果我有幾十個WCF服務和幾十個NUnit測試,看起來像我的NUnit.exe.config會是可怕的。

感謝,

尼爾·沃爾特斯

回答

5

不,你不會錯過任何。在.NET中,配置默認保留在託管應用程序中 - 在ASP.NET中,Web運行時和其配置文件 - web.config。

在一個類庫,它的託管應用程序,使用類庫,負責提供配置,通過它的app.config( - > YourApp.exe.config編譯後)。

上你可以做的事情是對外部化WCF web.config中部分爲獨立的* .config文件,然後再引用這些在你testapp.exe.config:

<system.serviceModel> 
    <extensions configSource="extensions.config" /> 
    <behaviors configSource="behaviors.config" /> 
    <bindings configSource="bindings.config" /> 
    <client configSource="client.config" /> 
    <services configSource="services.config" /> 
    </system.serviceModel> 

不幸的是,你只能外部化配置部分而不是配置節組(和<system.serviceModel>是一個配置節組:-(所以不能外部化它全局)。

馬克

+0

我覺得這是有道理的。如果我有5個應用程序都在NUnit中進行了測試,那麼我可以使用extensionsApp1.config,behaviorsApp1.config等......但是我仍然需要每個Web服務的5個配置文件 - yikes。 – NealWalters 2009-11-10 22:44:56

5

進行單元測試的目的,在客戶端,你應該嘲笑Web服務代理接口,使客戶端調用您的模擬,而無需對系統的休息場所。

在應用程序中,您可能會發現將參數(如地址和綁定)明確地程序化傳遞到WCF層會更方便 - 將它留給應用程序以確定它是否使用自己的配置。


編輯 - 延伸第一點。

WCF的要點是把一個接口,並提供運行在其他地方(通過Channel通用型)的實現。在單元測試中,您希望能夠使用本地模擬代替WCF生成的實現到接口。

Channel的使用隔離爲一個方法,您可以在測試工具中覆蓋或替換,並返回接口類型的對象。然後在單元測試中,交換你自己的方法,而不是返回模擬。

行使全部WCF連接 - 這不能在單元測試覆蓋的手寫代碼量小 - 是那麼系統或集成測試階段的一部分。

+0

你能否詳細說一下第一句話,不確定我是否理解它。你是說我應該自己做管道工,而不是使用自動生成的代理服務器?仍然在想這個想法。 – NealWalters 2009-11-10 22:47:48

+0

編輯按要求詳細說明。 – 2009-11-11 08:15:23

+0

將連接移動到自己的類中,以便您的dll具有與該服務的單一連接點,從該類中提取一個接口並模擬該:) – zzzuperfly 2009-11-11 08:29:07