【问题标题】:Moqing HttpContext墨青HttpContext
【发布时间】:2013-08-12 08:34:20
【问题描述】:

我有一个单元测试来测试 MVC 控制器的结果。不幸的是,控制器使用了使用HttpContext.Request.IsLocal 的第三方库。我无法重构第三方库以使其使用HttpContextBase

我需要对此进行模拟,以便 HttpContext.Request.IsLocal 返回 true。关于如何实现这一目标的任何想法?

【问题讨论】:

  • 你就不能模拟出第三方库吗?不确定在您的单元测试中是否需要外部依赖项或任何依赖项。
  • 问题是该方法是静态类中的静态方法,因此我唯一模拟它的方法是创建一个假 HttpContext
  • 如果您使用的是高级版或更高版本的 vs2012,请尝试查看 microsoft.fakes。它应该适合您的情况
  • @Slicksim 这看起来会起作用。但是谷歌上的例子似乎有点缺乏。所以如果问的不是太多,是否可以举个例子?另外,如果您将此作为答案,我可以稍后将其标记为正确答案
  • 对不起,我没有示例,我坚持使用专业版,我从阅读中知道这是 MS 打算使用 Microsoft.Fakes 的目的,以允许进行此类第三方测试。我可以想出一个例子,但要等到今晚我回到自己的桌面,上面有更好的 vs 版本

标签: asp.net .net asp.net-mvc-4 moq


【解决方案1】:

如果您使用的是高级版或更高版本的 vs2012,请尝试查看 microsoft.fakes。它应该适合您的情况。

一些阅读:

http://msdn.microsoft.com/en-us/library/hh549175.aspx

【讨论】:

    【解决方案2】:

    虽然公认的解决方案对您有用,但也有一些缺点,例如对 VS 测试运行器的依赖,我在与 nUnit(或其他框架)一起使用时到处阅读的一些问题,难以使用构建服务器运行这些测试,例如TeamCity 等。

    恕我直言,更好的方法是通过您自己的垫片/包装器隔离第三方库,而不是直接在您的代码中使用静态方法。

    是的,这需要更多的工作,但是,如果以后您需要升级或替换第三方库,它会更容易 - 您将只修改包装器,而您的代码不会受到影响。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-20
      • 2021-05-05
      • 2019-11-17
      • 2011-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多