asp.net-mvc – 如何使用rhino mocks在MVC RC1中存根HttpSession
发布时间:2020-12-16 06:41:26 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试利用asp.net mvc rc1中的 recent ControllerContext refactoring.我应该能够简单地存根会话,但在运行以下代码时,我在第2行继续获得System.NullReferenceException: var mockContext = MockRepository.GenerateStubControllerContext();mockContex
我正在尝试利用asp.net mvc rc1中的
recent ControllerContext refactoring.我应该能够简单地存根会话,但在运行以下代码时,我在第2行继续获得System.NullReferenceException:
var mockContext = MockRepository.GenerateStub<ControllerContext>(); mockContext.Stub(x => x.HttpContext.Session["MyKey"]).Return("MyValue"); 我究竟做错了什么? 编辑:我刚刚确认我有这个帖子的最新版本的rhino. 解决方法
您还需要模拟HttpContext才能使其正常工作.
我正在使用HttpContext的模拟: public class HttpContextMock { private readonly HttpContextBase _contextBase; private readonly HttpRequestBase _requestBase; private readonly HttpResponseBase _responseBase; private readonly HttpSessionStateBase _sessionStateBase; private readonly HttpServerUtilityBase _serverUtilityBase; public HttpContextBase Context { get { return _contextBase; } } public HttpRequestBase Request { get { return _requestBase; } } public HttpResponseBase Response { get { return _responseBase; } } public HttpSessionStateBase Session { get { return _sessionStateBase; } } public HttpServerUtilityBase Server { get { return _serverUtilityBase; } } public HttpContextMock() { _contextBase = MockRepository.GenerateStub<HttpContextBase>(); _requestBase = MockRepository.GenerateStub<HttpRequestBase>(); _responseBase = MockRepository.GenerateStub<HttpResponseBase>(); _sessionStateBase = MockRepository.GenerateStub<HttpSessionStateBase>(); _serverUtilityBase = MockRepository.GenerateStub<HttpServerUtilityBase>(); _contextBase.Stub(x => x.Request).Return(_requestBase); _contextBase.Stub(x => x.Response).Return(_responseBase); _contextBase.Stub(x => x.Session).Return(_sessionStateBase); _contextBase.Stub(x => x.Server).Return(_serverUtilityBase); _requestBase.Stub(x => x.IsAuthenticated).Return(true); _contextBase.User = new GenericPrincipal(new GenericIdentity("a@a.a"),new string[] {"Admin"}); } } 在测试的SetUp中,我创建了一个控制器的实例: [SetUp] public override void TestSetUp() { base.TestSetUp(); repository = MockRepository.GenerateMock<IFooRepository>(); controller = new FooController() { FooRepository = repository,UserRepository = userMockRepository }; controller.ControllerContext = new ControllerContext(context.Context,new RouteData(),controller); } 一切正常,我可以为会话和许多其他事情添加参数.希望这可以帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 如何使用ASP.NET Core将图像保存到数据库?
- asp.net-mvc – 如何找出在MVC3中调用我的视图的控制器动作
- asp.net – 使用必填字段验证器更改文本框颜色 无扩展器控制
- asp.net – GridView RowUpdating无法获取新值
- 在ASP.NET中如何识别/处理404异常?
- 实现ASP.NET MVC的自定义登录
- ASP.NET Health Monitoring和ELMAH是否相互替代?
- asp.net-membership – 黑客有可能解密ASP.NET会员密码吗?
- asp.net-mvc-4 – 如何将自定义linq查询传递给视图
- asp.net-mvc – 迷你探查器不显示ajax请求信息?