MrW*_*MrW 8 c# asp.net-mvc unit-testing html-helper virtual-path
我在测试HTML Helper时遇到了一个问题.基本上我正在创建一个包含大量行,列和不同类型数据的网格.在标题中还有一个图像,用于通知用户数据按哪个列排序.但是,当我现在正在编写我的测试时(太迟了,但迟到总比没有好?!),我得到了这个错误:
"应用程序相对虚拟路径'〜/ Images/SortingArrowUp.png'不能成为绝对路径,因为应用程序的路径未知."
var imgPath = VirtualPathUtility.ToAbsolute("~/Images/SortingArrowUp.png");
Run Code Online (Sandbox Code Playgroud)
我该怎么解决这个问题.我可以理解在测试期间这可能是一个什么问题,并且图像可能不可用而且所有这些,但是这样做的正确方法是什么?
mar*_*ind 15
正确的方法是打电话UrlHelper.GenerateContentUrl
而不是VirtualPathUtility
.在您的帮助程序代码中,您将执行以下操作:
MvcHtmlString MyHelper(this HtmlHelper helper, ...) {
// other code
var imgPath = UrlHelper.GenerateContentUrl("~/Images/SortingArrowUp.png",
helper.ViewContext.HttpContext);
// other code
}
Run Code Online (Sandbox Code Playgroud)
单元测试时,您必须传入正确的模拟上下文对象.你需要模拟HttpContext.Request.ApplicationPath
- 返回一些虚拟应用程序路径,HttpContext.Response.ApplyAppPathModifier()
- 什么也不做,HttpContext.Request.ServerVariables
- 返回null,HttpContext.Request.Path
并HttpContext.Request.RawUrl
- 返回一些有意义的值.
你可以使用这个重载:
var imgPath = VirtualPathUtility.ToAbsolute("~/Images/SortingArrowUp.png",
context.Request.ApplicationPath);
Run Code Online (Sandbox Code Playgroud)
这是UrlHelper.GenerateContentUrl
内部使用的,你只需要模拟ApplicationPath
.
归档时间: |
|
查看次数: |
6636 次 |
最近记录: |