SessionID:单元测试中的NotImplementedException

时间:2018-08-17 08:52:09

标签: c# asp.net-mvc moq mstest mvccontrib

我正在尝试为我的ASP.NET MVC项目创建单元测试,但是遇到了一段时间以来无法解决的问题。我总是在NotImplementedException上得到Session.SessionID

System.NotImplementedException: The method or operation is not implemented.
    at MvcContrib.TestHelper.MockSession.get_SessionID()

这是我的TestMethod

[TestMethod]
public void CannAddCategory()
{
    TestControllerBuilder controllerBuilder = new TestControllerBuilder();

    this.Login();

    HomeController controller = new HomeController();
    controllerBuilder.InitializeController(controller);

    GetAllQuestionsFromInitialCategory(controller);
}

我试图调试该方法,以找出问题所在,但错误是相同的:

System.NotImplementedException: 'The method or operation is not implemented.'

this.context = ContextSessionStore.GetInstance().GetQuestionnaireContext(Session.SessionID);

我对SO进行了进一步的研究,并提出了一些有关手动模拟Session的建议。这对我来说效果不佳。错误仍然存​​在。

手动模拟会话:

var mock = new MockRepository();
var mockSession = mock.Stub<HttpSessionStateBase>();

controller.HttpContext.BackToRecord();
controller.HttpContext.Stub(c => c.Session).Return(mockSession);
controller.HttpContext.Replay()

任何建议都值得赞赏。

更新

使用SessionID的控制器方法:

protected QuestionnaireContext Database
{
    get
    {
        if (Session == null)
        {
            this.context = new QuestionnaireContext();
            return this.context;
        }

        this.context = ContextSessionStore.GetInstance().GetQuestionnaireContext(Session.SessionID);
        return this.context;
    }

    private set
    {
        this.context = value;
    }
}

0 个答案:

没有答案