1

这是我的操作方法中的代码:

var bundleUrl = Scripts.Url("~/Scripts/MyBundle");

当我尝试对这个操作方法进行单元测试时,我得到以下错误/堆栈跟踪:

System.ArgumentNullException
Value cannot be null.
Parameter name: httpContext
   at System.Web.HttpContextWrapper..ctor(HttpContext httpContext)
   at System.Web.Optimization.Scripts.Url(String virtualPath)

有任何想法吗?

我已经适当地模拟了 HttpContext,因为请求被填充,我可以访问路由等。

我需要设置捆绑包吗?(就像我在 Global.asax 上所做的那样)

编辑:

在使用 ILSpy 查看 System.Web.Optimization 的源代码后,似乎 Scripts 类从静态 HttpContext.Current 实例(为空)创建了一个 HttpContextWrapper。

4

1 回答 1

1

因为Scripts该类使用静态System.Web.HttpContext.Current实例,所以这几乎是不可能模拟的。

所以我最终为脚本创建了一个包装接口,然后在我的单元测试中对其进行了模拟。

例如

var bundleUrl = Scripts ?? new ScriptsWrapper()..Url("~/Scripts/MyBundle");

单元测试:

controller.Scripts = new Mock<IScripts>().Object;
于 2013-07-24T03:55:19.463 回答