首先,让我说一下,我已经搜索了这个主题,并在这里找到了一个解决方案:
asp.net mvc:如何模拟Url.Content("~")?
然而,这个解决方案涉及创建一个新的基本控制器,在我当前的场景中,这不是我有权做的事情。所以,问题是…
我目前正在为一个MVC3应用程序编写一些单元测试(这是我现在的雇主第一次编写单元测试,所以我真的想把单元测试的好处带回家[虽然是相对较新的]单元测试我自己]),我遇到了一个障碍与Url。内容
应用程序的操作如下:
[HttpGet]
public ActionResult SearchResults()
{
...
...
...
if(results == null)
{
DisplayMessageInView("...Some display message...");
return RedirectToAction("Index");
}
其中DisplayMessageInView被定义为
private void DisplayMessageInView(string message)
{
string imageUrl = Url.Content("~/Content/Images/109_AllAnnotations_Info_48x48_72.png");
TempData["AlertMessage"] = string.Format("<img alt='info' src='{0}' /> {1}", imageUrl, message);
}
因此,他们正在构建一个消息和一个图像在Index操作上显示给用户。Url。内容在单元测试的方式,所以我正在寻找建议来解决/围绕这个工作。
我确实有一个替代的解决方案,需要更多的努力和重构,但认为这是一个很好的解决方案讨论点,不管怎样,因为我之前已经讲过几次了,总是不得不做一些超出普通。
除了上面的解决方案,还有什么其他的解决方案吗?感谢您的参与。
谢谢
控制器的设计是不正确的,再多的单元测试也无法解决这个问题。让它们允许您更正代码,并在null结果上简单地返回一个适当的View,如果需要,可以在ViewBag中设置一条消息。然后在视图中显示相应的图像和消息。