TestMethod用于使用缓存管理器在C#中验证Web API调用

时间:2017-10-24 16:15:36

标签: c# angularjs asp.net-web-api

我需要为我的AngularJS Web API调用编写测试方法,该方法在应用程序启动时具有应用程序缓存(缓存管理器)。当我尝试运行测试方法时,它调用Controller,当代码到达Business类时,它期望CacheManager中有Cache,因为缓存管理器是空的,因为我们还没有启动应用程序,它会抛出NULL异常。请帮忙。

2 个答案:

答案 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;