Moq和Url.Content

时间:2011-05-03 17:21:01

标签: c# asp.net-mvc unit-testing asp.net-mvc-3 moq

首先,让我说我已经搜索了这个主题并且确实遇到了一个解决方案:

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);
    }

因此,他们正在构建一条消息和一个图像,以便在Index操作上显示给用户。 Url.Content阻碍了单元测试,因此我正在寻找解决/解决此问题的建议。

我确实有一个替代解决方案,需要更多的努力和重构,但认为这是一个很好的 讨论点无论哪种方式,因为我之前已经多次运行过这种情况,并且总是不得不做一些事情 普通。

如果没有上述解决方案,除此之外还有哪些其他选择?感谢您的意见。

谢谢

1 个答案:

答案 0 :(得分:0)

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