加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

我如何在ASP.Net Web窗体中模拟/伪造会话对象?

发布时间:2020-12-15 23:49:04 所属栏目:asp.Net 来源:网络整理
导读:在创建单元测试时,有没有办法在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).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读