如何单元测试依赖于Session对象的库

时间:2009-01-23 13:40:24

标签: asp.net-mvc unit-testing session

我有几个使用相同控制器和型号的asp.net mvc网站 这个常见的逻辑放在单独的库中。 这些库使用HttpContext.Current.Session。如何使这些单元可测试? 我读到了有关StateValue的内容,但无法完全掌握它。我应该在哪里获得这个StateValue的东西?它是我引用的lib吗?

3 个答案:

答案 0 :(得分:1)

您可以使用模拟助手,例如看过here

答案 1 :(得分:1)

  1. 您的代码应该使用IHttpSessionState而不是HttpSessionState。
  2. 如果您查找IHttpSessionState的MSDN文档,您将找到一个示例实现,您可以将其升级到Unit Test项目以创建模拟会话。
  3. 将获取会话的代码替换为返回IHttpSessionState的静态委托。
  4. 使用HttpContext.Current.Session函数初始化静态委托。
  5. 在单元测试期间,用您的Mock实现IHttpSessionState替换委托。

答案 2 :(得分:1)

只是为了引导人们离开这个下沉洞(从.NET 3.5开始) - 不要为了模拟和测试而触摸IHttpSessionState:

http://www.codemerlin.com/2011/07/mocking-httpcontext-httpresponse-httprequest-httpsessionstate-etc-in-asp-net/