我如何在ASP.Net Web窗体中模拟/伪造会话对象?
在创建单元测试时,有没有办法在ASP.Net Web表单中模拟/假的会话对象?
我目前正在将用户详细信息存储在会话变量中,该变量由我的业务逻辑访问. 当隔离测试我的业务逻辑时,会话不可用.这似乎表明一个糟糕的设计(虽然我不确定).业务逻辑层应该首先访问会话变量吗? 如果是这样,那么我将如何用假的对象交换用户的详细信息进行测试? 解决方法
在ASP.NET中,由于密码不能创建HttpSessionState的测试双精度.是的,这是ASP.NET原始设计人员的糟糕设计,但并没有太多的事情要做.
这是TDD’ers和其他SOLID实践者大部分放弃ASP.NET以支持ASP.NET MVC和其他更可测试框架的原因之一.在ASP.NET MVC中,HTTP会话由抽象的HttpSessionStateBase类建模. 您可以采取类似的方法,让对象在抽象会话中工作,然后在ASP.NET环境中运行时包装真正的HttpSessionState类.根据具体情况,您甚至可以从System.Web.Abstractions重新使用类型,但是如果没有,您可以定义自己的类型. 在任何情况下,您的业务逻辑是您的域模型,并且应该独立于任何特定的运行时技术进行建模,所以我会说,它不应该首先访问会话对象. 如果您绝对需要使用测试双打来进行涉及HttpSessionState的单元计算机,那么仍然可以使用某些入侵的动态模拟,例如TypeMock或Moles,尽管它们还具有很多缺点(参见this comparison of dynamic mocks). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- System.Net.ServicePointManager.DefaultConnect
- 通过LAN调试ASP.NET云项目
- 如何在SDL Tridion页面上呈现asp.net用户控件?
- asp.net-mvc – 如何将字符串传递给ASP.NET MVC中
- asp.net – RaisePostBackEvent没有触发
- asp.net-mvc – jQuery.Validation.Unobtrusive客
- asp.net-mvc-4 – .NET MVC4 ActionNameSelector
- asp.net-mvc – 除了UI“flair”,你用什么jQuery
- asp.net – 如何在两个或多个aspx页面之间传递会
- asp.net-mvc – 在默认路由的ASP.NET MVC中的Url