使用MSTest时模拟对象

时间:2009-03-10 15:10:03

标签: .net unit-testing mstest

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

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

这段代码是不可测试的吗?

4 个答案:

答案 0 :(得分:3)

我不知道您要测试的Web项目类型(MVC或WebForms),但您应该能够mock out the HttpContextBase class using Scott Hanselmans mock helpersRhino.MocksMoq中都有示例其中是免费的。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

会话对象在您要测试的逻辑中起什么作用?例如,如果它只是asp.net正在使用的值,那么你可以实现一个presentation patterns来抽象它(并使编写测试变得容易)

例如 - 通过将会话信息推送到视图实现

,可以轻松测试以下逻辑
If UserObject.IsActive() Then
  _View.SessionActive = True
Else
  _View.SessionActive = False
End If

答案 3 :(得分:0)

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

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