我需要为我的AngularJS Web API调用编写测试方法,该方法在应用程序启动时具有应用程序缓存(缓存管理器)。当我尝试运行测试方法时,它调用Controller,当代码到达Business类时,它期望CacheManager中有Cache,因为缓存管理器是空的,因为我们还没有启动应用程序,它会抛出NULL异常。请帮忙。
答案 0 :(得分:0)
单元测试的良好实践是将测试逻辑与应该单独测试的依赖项分开。实现这一目标的最简单方法是嘲笑。您可以使用模拟的缓存管理器并将其注入应用程序,以处理将在测试期间进行的所有调用并返回预定义值。控制模拟界面的行为方式非常精细。根据我的经验,我会推荐Moq模拟包。
答案 1 :(得分:0)
在调用API控制器之前,需要设置config.Routes.MapHttpRoute并初始化HTTPCONTEXT,如下所示。
var Route = config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
HttpContext.Current = new HttpContext(
new HttpRequest("", "http://localhost", ""),
new HttpResponse(new StringWriter())
);
var RouteData = new HttpRouteData(Route, new HttpRouteValueDictionary { { "controller", "unittest" } });
var Request = new HttpRequestMessage(HttpMethod.Get, "http://localhost");
controller.ControllerContext = new System.Web.Http.Controllers.HttpControllerContext(config, RouteData, Request);
controller.Request = Request;
controller.Request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config;