4

我刚刚开始使用 MSTest(或者至少是 VS 2008 测试工具,有区别吗?)

我想测试使用会话对象的代码。显然我没有 HttpContext,我不能简单地创建一个,因此代码失败并出现 NullReferenceException。

这段代码是否根本无法测试?

4

4 回答 4

3

我不知道您正在尝试测试哪种类型的 Web 项目(MVC 或 WebForms),但您应该能够使用 Scott Hanselmans 模拟助手模拟 HttpContextBase 类,该助手在Rhino.MocksMoq中有示例,两者都是免费的.

于 2009-03-10T15:47:26.527 回答
1

我不知道不可测试,但肯定很难测试。你可以使用 typemock,它可以创建几乎所有东西的模拟和存根。但它不是免费的。

您还可以尝试将会话内容的调用包装在一个单独的对象中,并将其隐藏在接口后面。然后你可以将该接口注入到你的代码中。对于您的测试,您可以注入一个模拟实现。这将实现两件事,您的代码更容易测试,并且您不再依赖于 Asp.Net 中的会话实现。

于 2009-03-10T15:20:10.507 回答
0

会话对象在您要测试的逻辑中的参与程度如何?例如,如果它只是 asp.net 使用的一个值,您可以实现一种表示模式来抽象它(并使编写测试变得容易)

例如——下面的逻辑很容易通过将会话信息推送到视图实现来测试

If UserObject.IsActive() Then
  _View.SessionActive = True
Else
  _View.SessionActive = False
End If
于 2009-03-10T15:39:43.597 回答
0

在 VS 2010 中,Microsoft Moles是一个模拟选项。

在 VS 2012 中,Microsoft Fakes是一种模拟选项。

于 2014-06-20T20:06:13.287 回答