在.NET Core中模拟HttpContext.Session

时间:2016-10-10 20:09:28

标签: c# .net unit-testing asp.net-core

我正在使用xUnit和Moq为我的应用程序编写单元测试。 但是,我很难嘲笑会议。

被测系统是一个控制器动作,被测试的方法使用TempData["UserMessage"],由于会话未初始化,因此总是为空。

这是我试图模仿依赖的打印屏幕。 enter image description here

引发的错误位于第65行并且正在跟随 enter image description here

1 个答案:

答案 0 :(得分:2)

一般的经验法则是避免使用“脂肪控制器”。我的控制器字面上有他们需要针对相应服务执行的模型或参数。理想情况下,您的控制器操作是一次调用,其中包含许多描述端点的属性,请考虑以下事项:

public class MyThinController : Controller
{
    [
        HttpGet,
        Route("api/[controller]/foos/{bar}"),
        Authorize(Policy = nameof(Policies.StackoverflowOp))
    ]
    public Task<IActionResult> GetFoo([FromRoute] Bar bar,
                                      [FromServices] IExampleService service)
        => service.GetAsync(bar);
}

然后,您唯一关心的问题应该是bar IExampleService的实施正确获得Foo

但如果你完全不愿意以正确的方式去做,总会有一种方法以错误的方式做到这一点。您实际上正在寻找准备好moq的ActionContext.HttpContext