我试图在单元测试中生成视图,但我无法绕过丢失的VirtualPathProvider。大多数viewengines使用VirtualPathProviderViewEngine基类从当前的HostingEnvironment获取提供程序。
protected VirtualPathProvider VirtualPathProvider {
get {
if (_vpp == null) {
_vpp = HostingEnvironment.VirtualPathProvider;
}
return _vpp;
}
set {
_vpp = value;
}
}
在单元测试中没有HostingEnvironment,即使我创建了一个HostingEnvironment,也没有当前的VirtualPathProvider。
我该如何解决这个问题?我是否必须创建自定义FakeWebFormViewEngine?
答案 0 :(得分:2)
VS Team System 2010中有一些功能可用于验收测试,这些功能适用于您尝试执行的操作。如Gregory A Beamer Unit所述,MVC的测试是对控制器进行的。您还可以根据实施模型的方式测试模型。
这是存在很多争议的地方。有些人将模型视为业务实体,我将其视为特定于View的模型的表示。更多视图模型。由于我的模型中没有真正的功能,我不必测试它。我在MVC之外测试我的DAL,业务逻辑层。 MVC确实是表示层的一部分。它是您的演示文稿的分层而不是您的应用程序。您仍然可以对应用程序进行分层。
就单元测试而言,控制器是您测试的地方。如果有方法需要测试,您可以测试模型。至于视图,用户或通过像Watin这样的自动化验证它们。
答案 1 :(得分:0)
我也尝试过这样做。不幸的是,问题不仅仅是VirtualPathProvider(VPP)。 VPP用于将视图或部分视图映射到物理路径以确定文件的存在。遗憾的是,ViewContext以虚拟路径而不是物理路径结束,因此在渲染视图时,Builder使用不存在的HostingEvnironment属性。
如果您使用的是带有测试的Visual Studio版本,则可以使用Web单元测试。这将允许您使用浏览器调用URL,然后解析响应以检查值。
答案 2 :(得分:0)
请原谅我,如果这听起来无知,但产生观点的目的是什么?我可能会遗漏一些东西,但单元测试的主要焦点是“测试单元”。在正确设置的ASP.NET MVC应用程序中,需要测试的代码位于控制器及其下方。事实上,我会说,如果发展得当,它就在下面。
视图的测试是用户验收测试。无论如何,我认为自动化没有任何问题,但我不确定这是否必须通过单元测试完成。
我错过了什么吗?
答案 3 :(得分:0)
您可以尝试Ivonna进行集成(以及在某种程度上,单位)测试您的观看次数。