我已经花了更好的另一半今天下午试图找出如何嘲笑(使用MOQ)了相关的点点滴滴单元测试下面的HtmlHelper的UrlHelper类来创建的img标签哪些用户:怎么会一个单元测试的的HtmlHelper实际上采用帮手扩展方法
public static IHtmlString Image(this HtmlHelper helper, string id, string url, string alternateText, object htmlAttributes)
{
// Instantiate a UrlHelper
var urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
// Create tag builder
var builder = new TagBuilder("img");
// Create valid id
builder.GenerateId(id);
// Add attributes
builder.MergeAttribute("src", urlHelper.Content(url));
builder.MergeAttribute("alt", alternateText);
builder.MergeAttributes(new RouteValueDictionary(htmlAttributes));
// Render tag
return new MvcHtmlString(builder.ToString(TagRenderMode.SelfClosing));
}
有没有人在他们的工作已经解决了这个问题?
你不能这样做,因为你建议。你将如何在单元测试中创建HtmlHelper?您无权访问MVC框架的运行时环境,它为您提供了@Html助手属性。你不能只是“新的一个”。你不能只是静态地调用这个方法,因为它是一个使用它所扩展的对象的扩展方法。但是,谢谢你的建议。 – onefootswill 2013-03-17 06:59:52
@onefootswill,你的问题是你的代码中的UrlHelper。有了这门课你就不能做测试。你应该做的是当你将它传递给你的助手而不是你的助手内部时生成URL。 – 2013-03-19 06:56:10
我认为你是对的。虽然我喜欢在扩展方法中使用UrlHelper,但它不是测试友好的代码。我会坚持下去。我知道帮手的作品。它不需要测试。我想封装UrlHepler,以便传递tilda前缀的字符串。 – onefootswill 2013-03-19 11:37:54