2008-11-27 82 views
6

我试图在单元测试中生成视图,但我无法绕过缺少的VirtualPathProvider。大多数viewengines使用从当前HostingEnvironment获取提供者的VirtualPathProviderViewEngine基类。如何在asp.net-mvc单元测试中生成视图?

protected VirtualPathProvider VirtualPathProvider { 
    get { 
     if (_vpp == null) { 
      _vpp = HostingEnvironment.VirtualPathProvider; 
     } 
     return _vpp; 
    } 
    set { 
     _vpp = value; 
    } 
} 

在单元测试中没有HostingEnvironment,即使我创建一个没有当前的VirtualPathProvider。

我该如何解决这个问题?我必须创建一个自定义FakeWebFormViewEngine吗?

+0

你有没有找到答案?我遇到了同样的问题:-) – 2009-02-02 21:17:04

+0

2012年10月。即使所有的评论归结为“你测试它错了!”,人们可能仍然对实际测试依赖于VirtualPathProvider的机制感兴趣。所以只是好奇:任何人都到了那里? – 2012-10-15 14:45:47

回答

0

我试图做到这一点。不幸的是,这不仅仅是VirtualPathProvider(VPP)问题。 VPP用于将视图或局部视图映射到物理路径以确定文件的存在。不幸的是,ViewContext以虚拟路径结束,而不是物理路径,所以当渲染视图时,Builder使用不存在的HostingEvnironment的属性。

如果您在测试中使用Visual Studio版本,则可以使用Web单元测试。这将允许您使用浏览器调用URL,然后解析响应以检查值。

0

对不起,如果这听起来很无知,但生成视图的目的是什么?我可能会错过一些东西,但单元测试的主要重点是“测试单元”。在正确设置的ASP.NET MVC应用程序中,需要测试的代码位于控制器及其下方。事实上,我会说,如果开发得当,它就在下面。

该视图的测试是用户验收测试。无论如何,我认为自动化这一点没什么问题,但我不确定这是必须通过单元测试来完成的事情。

我错过了什么吗?

2

VS Team System 2010中有一些功能用于验收测试,它适用于您正在尝试执行的操作。正如Gregory A Beamer所提到的,MVC的单元测试是对控制器完成的。您还可以测试模型,具体取决于您如何实施模型。

这是有很多争议的地方。有些人将模型视为业务实体,我将其视为特定于View的模型表示。更多的视图模型。由于我的模型中没有真正的功能,我不必测试它。我测试了我的DAL,MVC之外的业务逻辑层。 MVC确实是表示层的所有部分。它是你的演示文稿的分层而不是你的应用程序。你仍然层叠你的应用程序。

就单元测试而言,控制器就是您测试的地方。如果有需要测试的方法,您可以测试您的模型。至于他们的观点,他们接受用户的测试或通过像Watin这样的自动化测试。

0

您可以尝试Ivonna进行测试您的视图的整合(并在某种程度上,单位)。