【问题标题】:Moq and Url.Content起订量和 URL.Content
【发布时间】:2011-05-04 01:42:57
【问题描述】:

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

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 妨碍了对此进行单元测试,因此我正在寻找解决/解决此问题的建议。

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

除了上述解决方案之外,还有哪些其他选择可以推动?感谢您的意见。

谢谢

【问题讨论】:

  • 为什么你没有权限改进你的公司代码库?
  • Slandau,如果涉及到这个问题,我会提出这个问题,但从业务角度来看,这是一个完成的解决方案。因此,对于不被视为增值的东西,此时实施更改将更具挑战性。这是我目前正在尝试改变的一种文化,所以如果我可以避免对解决方案本身进行更改,同时仍然能够实施单元测试,那将是一个胜利。
  • 我发现测试 url.content 的概念是一种无用的练习。为此添加单元测试并不能帮助您的组织相信可测试性不仅仅是一个时间槽。

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


【解决方案1】:

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

【讨论】:

  • 就像我想的那样。所以最后一个问题。您会重新使用现有视图并在视图中放置一些条件逻辑来确定实际显示的内容,还是创建一个全新的 NoSearchResults 视图?
  • 如果可能在其他地方使用后者。根据结果​​中的内容,您还可以实现空对象模式并返回相同的视图。我的偏好是 NoSearchResults 视图,但没有看到更多代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-03
  • 1970-01-01
  • 2017-11-04
  • 1970-01-01
相关资源
最近更新 更多