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

前端之家收集整理的这篇文章主要介绍了我如何在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的单元计算机,那么仍然可以使用某些入侵的动态模拟,例如TypeMockMoles,尽管它们还具有很多缺点(参见this comparison of dynamic mocks).

原文链接:https://www.f2er.com/aspnet/250911.html

猜你在找的asp.Net相关文章