如何在 Asp net Core 上最小化 HttpContext

BAS*_*SKA 2 c# asp.net unit-testing xunit asp.net-core

我有一个 asp .net 核心项目,实际上在我们使用 session 的每个操作中,我的问题是如果我没有 sessionRepository 如何测试它。控制器测试崩溃,因为控制器中的会话为空。我尝试 Moq IHttpContextAcessor 并且它也不起作用。

我试试这个:

HttpContext.Current = new HttpContext(new HttpRequest(null, "http://tempuri.org", null), new HttpResponse(null));

Run Code Online (Sandbox Code Playgroud)

但 HttpContext 不包含 Current 的定义。(使用 Microsoft.AspNetCore.Http;)

有没有办法对使用 HttpContext 和会话的最小起订量或测试控制器进行测试?

tym*_*tam 7

您可以使用ControllerContext将上下文设置为 DefaultHttpContext,您可以根据需要对其进行修改。

var ctx = new ControllerContext() { HttpContext = new DefaultHttpContext()};
var tested = new MyCtrl();
tested.ControllerContext = ctx;
Run Code Online (Sandbox Code Playgroud)

  • 我这样设置: ** var controller = new DashboardController() { ControllerContext = new Microsoft.AspNetCore.Mvc.ControllerContext()}; controller.ControllerContext.HttpContext = new DefaultHttpContext(); var resp =controller.MainDashboard(); ** (2认同)