C# Moq和Url.Content

C# Moq和Url.Content,c#,asp.net-mvc,unit-testing,asp.net-mvc-3,moq,C#,Asp.net Mvc,Unit Testing,Asp.net Mvc 3,Moq,首先,让我说我已经搜索了这个主题,并在这里找到了一个解决方案: 然而,这个解决方案涉及到创建一个新的基本控制器,在我当前的场景中,这不是我允许做的事情。所以,问题是 我目前正在为一个MVC3应用程序编写一些单元测试(第一个是由我现在的雇主编写的),因此我真的在努力让大家了解单元测试的好处[对我来说还是比较新的] 单元测试我自己),我遇到了Url.Content的一个障碍 该应用程序具有以下操作: [HttpGet] public ActionResult SearchResul

首先,让我说我已经搜索了这个主题,并在这里找到了一个解决方案:

然而,这个解决方案涉及到创建一个新的基本控制器,在我当前的场景中,这不是我允许做的事情。所以,问题是

我目前正在为一个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);
    }
private void displaymesseinview(字符串消息)
{            
字符串imageUrl=Url.Content(“~/Content/Images/109_AllAnnotations_Info_48x48_72.png”);
TempData[“AlertMessage”]=string.Format(“{1}”,imageUrl,message);
}
因此,他们正在构建一条消息和一幅图像,以便在索引操作中向用户显示。Content妨碍了单元测试,所以我正在寻找解决这个问题的建议

我确实有另一种解决方案,它需要更多的努力和重构,但我认为这是一个好办法 无论哪种方式,讨论都是重点,因为我之前已经多次提到这一点,并且总是不得不做一些不符合实际的事情 普通的

除了上述解决方案之外,还有什么其他选择可以超越这一点?谢谢你的意见


谢谢

控制器的设计不正确,再多的单元测试也无法解决这个问题。让他们允许您更正代码,并简单地返回空结果的适当视图,如果需要,可以在ViewBag中设置消息。在视图中,您将显示相应的图像和消息。

为什么您没有权限改进您公司的代码库呢?Slandau,如果涉及到这一点,我将提出这个问题,但从业务角度来看,这是一个解决方案。因此,对于一些不被视为增值的东西来说,在此时实施更改将更具挑战性。这是一种我现在正试图改变的文化,因此,如果我能够避免对解决方案本身的改变,同时仍然能够实现单元测试,那将是一个胜利。我发现测试url.content的概念是一个无用的练习。为此添加单元测试无助于让您的组织相信可测试性不仅仅是一个时间消耗。最后一个问题。您是否会重复使用现有视图,只需在视图中放置一些条件逻辑,以确定实际显示的内容,还是会创建一个全新的NoSearchResults视图?如果可能在其他地方使用,请使用后者。根据结果中的内容,还可以实现null对象模式并返回相同的视图。我不想看到更多的代码,但我更喜欢NoSearchResults视图。