如何在ASP.net核心单元测试项目中模拟Session变量?
1)我创建了一个会话的模拟对象。
模拟ockHttpContext = new Mock(); 模拟嘲讽HttpHttpContext = new Mock();模拟嘲讽Session = new Mock()。As();
2)设置GetString()方法
mockSession.Setup(s => s.GetString(“ ModuleId”))。Returns(“ 1”);
3)创建controllerContext并分配mockhttpContext对象
controller.ControllerContext.HttpContext =模拟HttpContext.Object;
4)尝试从控制器读取。
HttpContext.Session.GetString(“ ModuleId”)
而我得到的是“ ModuleId”的空值。请帮助我模拟会话GetString()方法
例:
//Arrange
//Note: Mock session
Mock<HttpContext> mockHttpContext = new Mock<HttpContext>();
Mock<ITestSession> mockSession = new Mock<ISession>().As<ITestSession>();
//Cast list to IEnumerable
IEnumerable<string> sessionKeys = new string[] { };
//Convert to list.
List<string> listSessionKeys = sessionKeys.ToList();
listSessionKeys.Add("ModuleId");
sessionKeys = listSessionKeys;
mockSession.Setup(s => s.Keys).Returns(sessionKeys);
mockSession.Setup(s => s.Id).Returns("89eca97a-872a-4ba2-06fe-ba715c3f32be");
mockSession.Setup(s => s.IsAvailable).Returns(true);
mockHttpContext.Setup(s => s.Session).Returns(mockSession.Object);
mockSession.Setup(s => s.GetString("ModuleId")).Returns("1");
//Mock …Run Code Online (Sandbox Code Playgroud)