我刚刚开始使用 MSTest(或者至少是 VS 2008 测试工具,有区别吗?)
我想测试使用会话对象的代码。显然我没有 HttpContext,我不能简单地创建一个,因此代码失败并出现 NullReferenceException。
这段代码是否根本无法测试?
我刚刚开始使用 MSTest(或者至少是 VS 2008 测试工具,有区别吗?)
我想测试使用会话对象的代码。显然我没有 HttpContext,我不能简单地创建一个,因此代码失败并出现 NullReferenceException。
这段代码是否根本无法测试?
我不知道您正在尝试测试哪种类型的 Web 项目(MVC 或 WebForms),但您应该能够使用 Scott Hanselmans 模拟助手模拟 HttpContextBase 类,该助手在Rhino.Mocks和Moq中有示例,两者都是免费的.
我不知道不可测试,但肯定很难测试。你可以使用 typemock,它可以创建几乎所有东西的模拟和存根。但它不是免费的。
您还可以尝试将会话内容的调用包装在一个单独的对象中,并将其隐藏在接口后面。然后你可以将该接口注入到你的代码中。对于您的测试,您可以注入一个模拟实现。这将实现两件事,您的代码更容易测试,并且您不再依赖于 Asp.Net 中的会话实现。
会话对象在您要测试的逻辑中的参与程度如何?例如,如果它只是 asp.net 使用的一个值,您可以实现一种表示模式来抽象它(并使编写测试变得容易)
例如——下面的逻辑很容易通过将会话信息推送到视图实现来测试
If UserObject.IsActive() Then
_View.SessionActive = True
Else
_View.SessionActive = False
End If
在 VS 2010 中,Microsoft Moles是一个模拟选项。
在 VS 2012 中,Microsoft Fakes是一种模拟选项。