我有一个单元测试来测试 MVC 控制器的结果。不幸的是,控制器使用了第三方库,该库使用HttpContext.Request.IsLocal
. 我无法重构第三方库以使其使用HttpContextBase
.
我需要对此进行模拟,以便HttpContext.Request.IsLocal
返回 true。关于如何实现这一目标的任何想法?
我有一个单元测试来测试 MVC 控制器的结果。不幸的是,控制器使用了第三方库,该库使用HttpContext.Request.IsLocal
. 我无法重构第三方库以使其使用HttpContextBase
.
我需要对此进行模拟,以便HttpContext.Request.IsLocal
返回 true。关于如何实现这一目标的任何想法?
如果您使用的是高级版或更高版本的 vs2012,请尝试查看 microsoft.fakes。它应该适合您的情况。
一些阅读:
尽管公认的解决方案对您有用,但也有一些缺点,例如对 VS 测试运行器的依赖、与 nUnit(或其他框架)一起使用时我在这里和那里阅读的一些问题、难以使用 TeamCity 等构建服务器运行这些测试等.
恕我直言,更好的方法是通过您自己的垫片/包装器隔离第三方库,而不是直接在您的代码中使用静态方法。
是的,这需要更多的工作,但是,如果以后您需要升级或替换第三方库,它会更容易——您将只修改包装器,而您的代码不会受到影响。