2010-09-20 48 views
4

我正在構建一個WCF服務,它接收外部IP上的請求並將它們轉換爲通過NServiceBus發送的消息。我如何測試NServiceBus.Configure.WithWeb()?

我的一個單元測試調用Global.Application_Start(),它執行應用程序的配置,然後嘗試將Web服務解析爲 ,驗證容器是否可以構建所有依賴關係。

當我用我的窗口服務Configure.With()這工作得很好,但 調用Configure.WithWeb()在這種情況下(大概是因爲「bin」的 目錄不存在?)失敗。

是否可以單元測試調用Configure.WithWeb()的方法,或者我應該使用Configure.With()的過載來獲取目錄名稱?

+0

取決於你想要得到多麼複雜,但是你可以在通話周圍包裝一個通用BootStrapper接口/類,並根據當前上下文將其交換出去。 – 2010-09-20 16:39:07

+0

我遇到了同樣的問題。我得到的異常是這樣的:ArgumentNullException at System.IO.DirectoryInfo..ctor(String path) at Configure.cs中的NServiceBus.Configure.GetAssembliesInDirectoryWithExtension(String path,String extension,String [] assembliesToSkip):line 226 at NServiceBus.Configure。 d__7.MoveNext()在Configure.cs中:第217行 – ssmith 2010-12-19 16:20:09

回答

0

我創建了一個新的啓動類,像這樣:

public class NonWebRunAtStartup : IRunAtStartup 
{ 
    public void InitializeInfrastructure(object container) 
    { 
     Configure.With() 
      .StructureMapBuilder((IContainer) container) 
      .Log4Net() 
      .XmlSerializer() 
      .MsmqTransport() 
      .UnicastBus() 
      .LoadMessageHandlers() 
      .CreateBus() 
      .Start(); 
    } 
} 

然後在我的測試中,我保證,我的IOC容器會使用這個而不是通常的以網絡爲基礎,加入這我的測試之一:

IoC.Register<IRunAtStartup, NonWebRunAtStartup>(); 

這讓我到一個不同的錯誤,我還在與戰鬥,我會問作爲一個單獨的問題(現在NSB無法加載組件是在NServiceBus.Core.dll,例如作爲Antlr3.Runtime.dll)。

+0

這是我最終決定的相同解決方案;因爲我試圖測試實際的啓動,所以創建一個單獨的啓動方法沒有什麼意義,其中測試是唯一被調用的地方。 – arootbeer 2010-12-20 03:21:37

+0

是的,我同意重複不理想。不幸的是,這是我能想到的最好的(只要兩個啓動類保持同步,但它是一個手動過程) – ssmith 2011-01-19 15:09:12