我正在尝试为我的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;
}
}