2017-08-27 45 views
1

我有我正在嘗試集成測試的OWIN Web API應用程序。爲了做到這一點,我在內存中創建的服務器,像這樣:OWIN集成測試 - HttpContext爲空

private TestServer _server; 

    [TestInitialize] 
    public void Intitialize() 
    { 
     _server = TestServer.Create<Startup>(); 
    } 

集成測試:

[TestMethod] 
    public async Task Test_Controller() 
    { 
     //Act 
     var response = await _server.HttpClient.GetAsync("/controller/test"); 

     //Assert 
     Assert.AreEqual(HttpStatusCode.Ok, response.StatusCode); 
    } 

在我的控制,我想從HttpContext的訪問某些信息,遺憾的是,這是在集成測試期間始終爲空,因此會引發異常。

無論如何,我可以在我的集成測試期間嘲笑httpcontext?

+1

模擬http上下文的集成測試不是集成測試。你想在這裏測試什麼? –

+0

U可以在沒有服務器部分的情況下逐個測試api方法 –

+0

@tomredfern因爲我在進行內存中測試,所以http-context始終爲空afaik。這就是爲什麼我需要在那裏放置一個假的httpcontext的原因。 – Kaladin

回答

1

您有一個具有owin兼容性的Web-App CodeBase,託管在IIS中。您現在正在添加Integration-Test並使用您的Web-App的內存實例。

如前所述,您的集成測試不會與您的IIS託管的WebApp完全匹配。 IIS可能會運行一些不會從您的Owin-Host執行的HTTP模塊。無-IIS-Hosting上的HttpContext也缺失。

如果您只是想避免在使用HttpContext時擊中您的NullReference-Exception,請考慮更新您的代碼庫並找到HttpContext的替代品。 (例如:對於委託人,請使用requestContext)

在場景中,您需要自定義上下文對象,並要求向您的Owin-Host注入存根/模擬:在您的內存中主機啓動時注入行爲:

_server = Microsoft.Owin.Hosting.WebApp.Start("url", (appbuilder) => 
      { 
       // your default startup (of TestServer.Create) 
       // register some custom stubs/mocks using ioc setup or owin middleware 
      });