首页 / C# / c# – 无法设置会话变量
c# – 无法设置会话变量
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 无法设置会话变量,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1603字,纯文字阅读大概需要3分钟。
内容图文
![c# – 无法设置会话变量](/upload/InfoBanner/zyjiaocheng/756/ef1041976a9047d9b7fbb5b15d7ff36d.jpg)
我尝试设置会话变量以运行某些单元测试时未成功.当我尝试设置会话变量时,我不断收到“System.NullReferenceException:对象引用未设置为对象实例”的错误.
这是我正在构建的测试:
[TestMethod]
public void MyMethod()
{
//Arrange
int id = 12345;
string action = "A";
string comment = "";
string user = "user";
var controller = new MyController();
//Act
controller.Session["altUser"] = user;
var result = controller.Process(id, action, comment);
//Assert
Assert.IsNotNull(result);
}
这是我的控制器:
[Authorize]
public class MyController : Controller
{
public ActionResult Process(int id, string action, string comment)
{
string userId = Session["altUser"].ToString();
//some other stuff that evaluates ID, Action, and Comment
}
}
但是,当我运行应用程序本身时,没有错误,应用程序正常运行.我确实理解,通过测试驱动开发,测试应该为实现铺平道路.我正在尝试对已经完成的应用程序进行单元测试.如果可能的话,因为应用程序有效,我想避免对我的实现进行任何更改,只需编写一个单元测试来支持我已经知道的内容.
解决方法:
控制器从HttpContext获取会话,这在单元测试中不存在,这就是失败的原因.
但是,您可以模拟HttpContext并在其中放置模拟会话.
像这样的东西可能会起作用(使用moq作为Mocking框架)
var mockControllerContext = new Mock<ControllerContext>();
var mockSession = new Mock<HttpSessionStateBase>();
mockSession.SetupGet(s => s["altUser"]).Returns("user");
mockControllerContext.Setup(p => p.HttpContext.Session).Returns(mockSession.Object);
var controller = new MyController();
controller.ControllerContext = mockControllerContext.Object;
你显然需要在模拟对象中填写你真正希望得到的细节.
您还可以从HttpSessionStateBase和HttpContextBase派生自己的类,并使用它们而不是真实会话.
内容总结
以上是互联网集市为您收集整理的c# – 无法设置会话变量全部内容,希望文章能够帮你解决c# – 无法设置会话变量所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。