2011-05-03 102 views
0

首先,请允许我说,我搜索了这个话题并没有碰到这里的解决方案:起订量和Url.Content

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}' />&nbsp;&nbsp;{1}", imageUrl, message); 
    } 

因此,他们正在建立一条消息和一张图片,以便在索引操作中向用户显示。 Url.Content获取单元测试的方式,所以我正在寻找建议来解决/解决此问题。

我确实有一个替代解决方案需要更多的努力和重构,但是我认为这是一个很好的 讨论要点,因为我之前运行过几次,总是需要做点什么的普通的 。

上面的解决方案不足,还有什么其他选择可以超越这一点?您的意见是赞赏。

谢谢

+0

为什么你没有权限改善你的公司代码基础? – slandau 2011-05-03 17:33:22

+0

Slandau,如果说到这一点,我会按这个问题,但这是一个解决方案,从业务角度来看*做*。因此,在这一点上实施变革对于那些不被视为增值的东西来说更具挑战性。这是我现在想要改变的一种文化,所以如果我能够避免对解决方案本身的改变,同时仍然能够实现单元测试,那将是一场胜利。 – Khepri 2011-05-03 17:45:53

+0

我发现测试url.content的概念是无用的练习。为此添加单元测试并不能帮助您的组织说服可测试性不仅仅是时间问题。 – 2011-05-03 19:11:14

回答

0

控制器的设计不正确,没有单元测试的量要解决这个问题。让他们允许您更正代码,并简单地返回空结果的适当视图,如果需要可能在ViewBag中设置消息。在视图内部,您将显示适当的图像和信息。

+0

我想的那种。所以最后一个问题。您是否会重新使用现有的视图,并在视图中放置一些条件逻辑,以确定要显示的内容,还是创建一个全新的NoSearchResults视图? – Khepri 2011-05-03 18:00:59

+0

后者,如果它很可能会在其他地方使用。根据结果​​中的内容,您还可以实现空对象模式并返回相同的视图。我的偏好没有看到更多的代码,但是NoSearchResults视图。 – 2011-05-03 18:02:45