asp.net - 模拟HttpContext不起作用

标签 asp.net asp.net-mvc unit-testing mocking rhino-mocks

我正在尝试模拟HttpContext,以便可以对 Controller 的Request.IsAuthenicated调用进行单元测试。我正在使用code that I found at Scott Hanselman's博客使用rhino.mocks模拟HttpContext。
所以我有这个单元测试件:

PostsController postsController = new PostsController(postDL);
mocks.SetFakeControllerContext(postsController);
Expect.Call(postsController.Request.IsAuthenticated).Return(true);

在 Controller Action 中,我有类似if(Request.IsAuthenticated)....当我尝试运行单元测试时,该测试失败并抛出空异常,并且当我尝试调试该单元测试时,我看到HttpContext从未分配给 Controller 。
有任何想法吗?

最佳答案

这应该工作:

PostsController postsController = new PostsController(postDL);
var context = mocks.Stub<HttpContextBase>();
var request = mocks.Stub<HttpRequestBase>();
SetupResult.For(request.IsAuthenticated).Return(true);
SetupResult.For(context.Request).Return(request);    
postsController.ControllerContext = new ControllerContext(context, new RouteData(), postsController);

关于asp.net - 模拟HttpContext不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/239059/

相关文章:

asp.net - 从 asp.net 核心 Controller 方法返回结果后如何继续处理?

c# - 具有一个固定操作的 MVC 路由和具有多个可选参数的 Controller

java - 测试应用程序服务器响应

c# - 如何将 HttpRequest 接收到 MVC 3 Controller 操作中?

c# - 适用于企业应用程序的 ASP.NET Core 1.0

asp.net-mvc - 模型中的 ASP.NET MVC 绑定(bind)数组

c# - ASP.Net 中的自定义角色提供程序是否为使用 Windows 身份验证的每个用户实例化?

angularjs - 如何在 Angular 单元测试(Mocha)中模拟 $location.path

unit-testing - 单元测试 elixir 功能正常

c# - 在事件处理程序结束时执行 javascript 代码