2011-11-15 39 views
1

我有以下的規格(使用Machine.Specifications或mSpec):南希測試不會在其他裝配發現路由

public class when_a_user_logs_in_successfully 
{ 
    static Browser _browser; 
    static BrowserResponse _response; 

    Establish context =() => 
     { 
      var bootstrapper = new ConfigurableBootstrapper(); 

      _browser = new Browser(bootstrapper); 
     }; 

    Because of =() => _response = _browser.Get("/Login", with => with.HttpRequest());  

    It should_return_a_successful_response =() => _response.Body.ShouldNotBeNull(); 
} 

從規範的路徑應該找到以下模塊:

public class LoginModule : NancyModule 
{ 
    public LoginModule() 
    { 
     Get["/Login"] = parameters => "test"; 
    } 
} 

但由於某些原因,響應的狀態爲「NotFound」,而Body則拋出一個表示流被關閉/丟棄的異常。我的規格解決方案有一個包含LoginModule的程序集的引用。我應該做些什麼來使規範找到模塊中的路線?

回答

5

這是因爲你沒有對其他程序集的任何「硬引用」(即你沒有直接使用那裏的任何類型),因爲.Net沒有加載它,Nancy贏得了'找到它。

我們有一個AppDomainAssemblyTypeScanner,您可以使用它來加載您的程序集(有幾個方法可以用來加載DLL的通配符),或者您可以通過添加一個類型的變量將您的主要組件放入測試組件中。

我想在將來我們必須更改測試運行器來加載它默認可以找到的每個DLL,並且如果它導致問題,可以選擇更改它。

+0

這樣做!謝謝! –

+0

我有完全相同的問題,Nancy正在執行所有Before/After鉤子,但在任何路由上返回404。使用AppDomainAssemblyTypeScanner沒有任何區別。 –