2013-02-08 17 views
0

當單元測試Nancy Web應用程序時,我得到「無法訪問封閉的流」。獲取單元測試時無法訪問封閉的流南希

我的模塊如下:

public class MainModule : NancyModule 
{ 
    public MainModule() 
    { 
     Get["/{Name}"] = p => 
      { 
       var command = this.Bind<MainCommand>(); 
       return Response.AsJson(command.ExecuteGetMessage()); 
      }; 
    } 
} 

而且我的測試是:

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

     BrowserResponse browserResponse = browser.Get("/", with => 
      { 
       with.HttpRequest(); 
      }); 

     Console.WriteLine(browserResponse.StatusCode); 
     Console.WriteLine(browserResponse.Body.ToString()); 

     // Then 
     Assert.AreEqual(HttpStatusCode.OK,browserResponse.StatusCode); 
    } 

更新:我得到的StatusCode = NOTFOUND和試圖訪問browserResponse.Body當發生異常。

我看了一下南希論壇,也在這裏看着StackOverflow。 我試過這個解決方案:Nancy test doesn't find route in other assembly

但仍然無法正常工作。

當我在調試模式下運行測試,我看到我的模塊被調用,但我仍然無法檢查返回的值。

我該怎麼做才能使它工作?

感謝

ADEMAR

+0

在該行的測試,你得到的錯誤? –

+0

嗨@Christian Horsdal,謝謝你的回覆。我更新了這個問題。 謝謝。 – Ademar

回答

1

你得到一個NOTFOUND響應,因爲您已經定義的路線是從已調用的路線不同。

您正在測試中調用/,但該模塊的路由爲/{Name}

異常是因爲沒有包含NotFound響應的主體。

更新您的測試是這樣的:

var bootstrapper = new ConfigurableBootstrapper(c=>c.Module<MainModule>()); 
var browser = new Browser(bootstrapper); 
BrowserResponse browserResponse = browser.Get("/ademar", with => 
     { 
      with.HttpRequest(); 
     }); 

*更新,包括註釋*源

+0

嗨@codeprogression,謝謝你的回答。但它沒有解決這個問題。我試過了,結果是一樣的,沒有發現和我無法訪問封閉流的錯誤。 – Ademar

+1

有趣。關於封閉流的錯誤預計會有一個沒有答案的答案。您是否在您引用的其他問題中添加了「硬引用」?你可以這樣做'var bootstrapper = new ConfigurableBootstrapper(c => c.Module ());'這會查找你正在測試的模塊。 – codeprogression

+0

我確實做過,並且仍然一樣。感謝您的回覆。我可能會開始另一個項目,並檢查它是否會工作。 – Ademar