Unit testing 单元测试访问捆绑包的ASP.NET MVC操作

Unit testing 单元测试访问捆绑包的ASP.NET MVC操作,unit-testing,asp.net-mvc-4,bundling-and-minification,system.web.optimization,Unit Testing,Asp.net Mvc 4,Bundling And Minification,System.web.optimization,以下是我的操作方法中的代码: var bundleUrl = Scripts.Url("~/Scripts/MyBundle"); 当我尝试并单元测试此操作方法时,我得到以下错误/堆栈跟踪: System.ArgumentNullException Value cannot be null. Parameter name: httpContext at System.Web.HttpContextWrapper..ctor(HttpContext httpContext) at S

以下是我的操作方法中的代码:

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实例(为null)创建了HttpContextWrapper。

因为
脚本类使用静态
System.Web.HttpContext.Current
实例,这几乎不可能模拟

所以我最终为脚本创建了一个包装器接口,然后在单元测试中模拟了它

例如

单元测试:

controller.Scripts = new Mock<IScripts>().Object;
controller.Scripts=new Mock().Object;

因为
脚本
类使用静态的
System.Web.HttpContext.Current
实例,这几乎不可能模拟

所以我最终为脚本创建了一个包装器接口,然后在单元测试中模拟了它

例如

单元测试:

controller.Scripts = new Mock<IScripts>().Object;
controller.Scripts=new Mock().Object;