首先,让我说我已经搜索了这个主题并且确实遇到了一个解决方案:
asp.net mvc: how to mock Url.Content("~")?
然而,这个解决方案涉及创建一个新的基本控制器,在我目前的情况下,这不是我有权做的事情。所以,问题......
我正在为MVC3应用程序编写一些单元测试(第一个是由我现在的雇主编写的,所以我真的想把单元测试的好处带回家[虽然相对较新的 单元测试自己])并且我遇到了Url.Content
该应用程序的操作如下:
[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.Content阻碍了单元测试,因此我正在寻找解决/解决此问题的建议。
我确实有一个替代解决方案,需要更多的努力和重构,但认为这是一个很好的 讨论点无论哪种方式,因为我之前已经多次运行过这种情况,并且总是不得不做一些事情 普通。
如果没有上述解决方案,除此之外还有哪些其他选择?感谢您的意见。
谢谢
答案 0 :(得分:0)
控制器的设计不正确,没有多少单元测试可以解决这个问题。让它们允许您更正代码并简单地在null结果上返回适当的View,如果需要,可以在ViewBag中设置消息。在视图内,您将显示相应的图像和消息。