加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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);
    }

一切正常,我可以为会话和许多其他事情添加参数.希望这可以帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读