gpt4 book ai didi

c# - OWIN 集成测试 - HttpContext 为空

转载 作者:太空宇宙 更新时间:2023-11-03 12:24:09 26 4
gpt4 key购买 nike

我有 OWIN Web API 应用程序,我正在尝试对其进行集成测试。为此,我在内存中创建了一个服务器,如下所示:

    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);
}

在我的 Controller 中,我试图从 HttpContext 访问一些信息,不幸的是,它在集成测试期间始终为 null,因此它会抛出异常。

无论如何我可以在集成测试期间模拟 httpcontext 吗?

最佳答案

您有一个 Web 应用程序代码库,具有 owin 兼容性,托管在 IIS 中。您现在正在添加 Integration-Test 并正在使用您的 Web 应用程序的内存中实例。

如前所述,您的集成测试不会与您的 IIS 托管的 WebApp 完全匹配。 IIS 可能会运行一些不会从您的 Owin 主机执行的 HTTP 模块。 None-IIS-Hosting 上的 HttpContext 也丢失了。

如果您只是不想摆脱在使用 HttpContext 时遇到的 NullReference-Exception,请考虑更新您的代码库并找到 HttpContext 的替代品。 (例如:对于委托(delegate)人,使用 requestContext)

在场景中,您需要自定义上下文对象并要求将 stub /模拟注入(inject)到您的 Owin 主机中:在内存主机启动时注入(inject)行为:

_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
} );

关于c# - OWIN 集成测试 - HttpContext 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45907810/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com