我正在尝试模拟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);