2013-02-28 66 views
3

我想不通爲什麼這個異常被拋出...... 我有一個單元測試:序列包含多個元素的NancyBootstrapperBase類

[Test] 
public void Should_return_status_ok_when_route_exists() 
{ 
    // Given 
    var bootstrapper = new DefaultNancyBootstrapper(); 
    var browser = new Browser(bootstrapper); 

    // When 
    var result = browser.Get("/", with => 
             { 
              with.HttpRequest(); 
             }); 
    // Then 
    Assert.AreEqual(HttpStatusCode.OK, result.StatusCode); 

} 

雖然瀏覽器變量被分配,除了在扔與後續堆棧跟蹤南希引導程序的基類

System.InvalidOperationException:序列包含多個元素

at System.Linq.Enumerable.SingleOrDefault(IEnumerable`1 source) 
at Nancy.Bootstrapper.NancyBootstrapperBase`1.GetRootPathProvider() in NancyBootstrapperBase.cs: line 558 
at Nancy.Bootstrapper.NancyBootstrapperBase`1.get_RootPathProvider() in NancyBootstrapperBase.cs: line 172 
at Nancy.Bootstrapper.NancyBootstrapperBase`1.GetAdditionalInstances() in NancyBootstrapperBase.cs: line 514 
at Nancy.Bootstrapper.NancyBootstrapperBase`1.Initialise() in NancyBootstrapperBase.cs: line 242 
at Nancy.Testing.Browser..ctor(INancyBootstrapper bootstrapper) in Browser.cs: line 39 
at Tests.Tests.Should_return_status_ok_when_route_exists() in Tests.cs: line 34 
+0

您是否正在運行您應用程序所在的項目中的Nancy.Testing?如果不是,那麼你是否參考了也引用Nancy.Testing的項目中的主機程序集(Nancy.Hosting.xxxx)? – TheCodeJunkie 2013-02-28 17:51:46

+0

我沒有跑Nancy.Testing。我應該這樣做嗎?我只是添加了Nancy,Nancy.Authentication.Forms,Nancy.Testing對我的測試項目的引用,並運行我在VS中使用Resharper編寫的測試。這是不正確的? – 2013-03-01 09:55:07

+0

如果您只在運行測試時引用了Nancy,Nancy.Authentication.Forms和Nancy.Testing並且遇到了這個問題,那麼我們需要了解有關您的項目設置的更多信息,以瞭解它發生的原因。代碼是否可用? – TheCodeJunkie 2013-03-01 10:49:00

回答

1

我最近有同樣的問題。我試圖通過像這樣解析Nancy模塊來測試我的引導程序:

[Test] 
public void PushModule_Is_Resolvable() 
{ 
    var pushModule = mUnderTest.GetModule(typeof (PushModule), new NancyContext()); 
    Assert.That(pushModule, Is.Not.Null); 
} 

這產生了問題中描述的異常。在閱讀克里斯的回答後,我剛剛配置該DLL不會被複制到Visual Studio中的輸出文件夾:

  • 在測試的項目中找到Nancy.Hosting.Self引用。
  • 右鍵單擊引用並選擇「屬性」。
  • Set 將本地複製複製到false
  • 清理並重建您的解決方案。

這解決了我的問題。 我會張貼此評論克里斯的答案,但因爲這是我的第一篇文章,我只能張貼答案。

1

我已經用Nancy 0.16.1在一個新的測試程序集上看到了這一點,該程序集引用了Nancy,Nancy.Testing和項目引用(在VS2010中)到包含我的模塊的主要服務程序集。

服務組件引用Nancy.Hosting.Self。

測試程序集的內部版本將Nancy.Hosting.Self.dll拖到構建文件夾中,並且測試失敗,並顯示您描述的錯誤。

手動移除生成文件夾中的主機DLL解決了錯誤,測試變爲綠色,例如,刪除MyTests\bin\Debug\Nancy.Hosting.Self.dll

1

我在測試一個引用Nancy.Hosting.Self的項目時經歷過同樣的情況。

我的解決方法是創建一個CustomBootstrapper並覆蓋RootPathProvider屬性。

class TestBootStrapper : DefaultNancyBootstrapper{ 
    protected override IRootPathProvider RootPathProvider { 
     get { 
      return new FakeRootPathProvider(); 
     } 
    } 
} 
相關問題