gpt4 book ai didi

c# - 使用 HttpServer/HttpClient 集成测试 ASP.NET Web API 2;没有 HttpContext

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

我正在寻找集成测试构建在 ASP.NET Web API 2 上的 Web 服务。许多事情(例如 cookie、获取当前主体等)都是通过 HttpContext.Current 完成的。

我发现了以下有关集成测试 ASP.NET 的资源: http://amy.palamounta.in/blog/2013/08/04/integration-testing-for-asp-dot-net-web-api/

这很好用。它启动了一个内存主机,并结合了 Entity Framework 6 的自动模式生成,设置和拆卸都很容易。

如前所述,当事情尝试使用 HttpContext.Current 获取 cookies/等时,问题就出现了。似乎在使用 HttpServer 在内存中托管时,HttpContext.Current 始终为空。考虑到没有真正的请求,这确实有点意义,但很痛苦 - 这意味着集成测试无法涵盖任何需要此属性的任何内容。

我可以在这里做什么?除了 HttpContext.Current 之外,我使用的数据似乎很少,所以我是否只需要在 IIS 上启动完整的外部实例?

最佳答案

为了使用自托管测试您的 api,您必须避免从 web api 上下文调用 HttpContext.Current。您可以将它包装在您可以模拟的东西中,如下所示:

public static class CurrentHttpContext
{
public static Func<HttpContextBase> Instance = () => new HttpContextWrapper(HttpContext.Current);
}

然后当您创建测试服务器时,您可以将 CurrentHttpContext 设置为一些假的 HttpContextBase。例如使用 FakeItEasy ( http://fakeiteasy.github.io/ ):

var context = A.Fake<HttpContextBase>();
CurrentHttpContext.Instance = () => context;

然后在任何需要访问 HttpContext 的地方使用它:

var context = CurrentHttpContext.Instance();
// do what you need to do to httpcontext now like setting principal, cookies etc

关于c# - 使用 HttpServer/HttpClient 集成测试 ASP.NET Web API 2;没有 HttpContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30358322/

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