【发布时间】:2011-09-19 16:18:25
【问题描述】:
我正在测试 MVC HTML 帮助程序中的代码,该帮助程序在尝试获取应用程序路径时抛出错误:
//appropriate code that uses System.IO.Path to get directory that results in:
string path = "~\\Views\\directory\\subdirectory\\fileName.cshtml";
htmlHelper.Partial(path, model, viewData); //exception thrown here
抛出的异常是
System.Web.HttpException: 应用程序相对虚拟路径 '~/Views/directory/subdirectory/fileName.cshtml' 不能设为绝对路径,因为应用程序的路径未知。
听从How to resolve issue with image path when testing HtmlHelper?的建议
我伪造了(使用最小起订量):
-
Request.Url返回一个字符串 -
Request.RawUrl返回一个字符串 -
Request.ApplicationPath返回一个字符串 -
Request.ServerVariables返回一个空的 NameValueCollection -
Response.ApplyAppPathModifier(string virtualPath)返回一个字符串
还需要什么才能允许此代码在单元测试运行的上下文中运行?
或者
我应该采取什么其他方法来在动态构建的字符串上呈现部分视图?
【问题讨论】:
-
@StuperUser 这不是您问题的完整答案,但如果您将 Mocks 创建为
new Mock<I....>(MockBehavior.Strict),您将获得 ASP.NET MVC 和 Moq 来告诉您您需要什么 - 您将为您尚未实施的设置抛出异常。 -
谢谢@Ciaran,知道这很有用,但似乎我已经模拟了
MockBehavior.Strict所需的一切,以允许我运行测试以抛出异常。 -
我通常不对渲染过程进行单元测试。在这个单元测试中,你认为什么是“通过”?
-
测试是为了构建该路径,但我认为应该将它放在帮助器类中并在那里进行测试。
-
@Hector,如果您希望因某个问题获得良好声誉 (c2.com/cgi/wiki?RubberDucking),请在下面回答,您将获得支持和接受的答案。
标签: c# asp.net asp.net-mvc unit-testing mocking