在创建单元测试时,有没有办法在ASP.Net Web表单中模拟/假的会话对象?
我目前正在将用户详细信息存储在会话变量中,该变量由我的业务逻辑访问.
当隔离测试我的业务逻辑时,会话不可用.这似乎表明一个糟糕的设计(虽然我不确定).业务逻辑层应该首先访问会话变量吗?
如果是这样,那么我将如何用假的对象交换用户的详细信息进行测试?
@H_301_8@解决方法
在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).
@H_301_8@ @H_301_8@ 原文链接:https://www.f2er.com/aspnet/250911.html