【问题标题】:Unit Testing WEBAPI Controllers单元测试 WEBAPI 控制器
【发布时间】:2015-11-17 16:57:14
【问题描述】:

我有一个我正在尝试进行单元测试的 webapi 控制器。但是我正在努力解决不同类型的 ControllerContext。我看到的大多数代码示例都与测试 MVC 控制器而不是 Web API 控制器有关。

控制器定义为:

public class OrdersController : ApiController
{

我有这段代码在我运行应用程序时可以工作

uri = Url.Route("DefaultRoute", new { httproute = true, Id = order.Id});

但是,当我尝试将其作为单元测试运行时,它会失败。我调试了它,发现运行单元测试时 Url 为 null,而如果我正常运行系统,Url 是 System.Web.Http.Routing.UrlHelper 类型的对象。

知道在运行单元测试时如何让 Url.Route() 工作吗?

【问题讨论】:

    标签: unit-testing asp.net-web-api routes


    【解决方案1】:

    对于 Web API 2 中的单元测试,更简单的选择是为控制器实例提供一个 Mock 版本的 UrlHelper。这个例子使用Moq

            var mockUrlHelper = new Mock<UrlHelper>();    
            ordersCtrl.Url = mockUrlHelper.Object;
    

    如果您使用的是更高版本的 web api,您将在测试中使用 RouteData 填充控制器。此示例取自asp.net website

     controller.Configuration = new HttpConfiguration();
     controller.Configuration.Routes.MapHttpRoute(
        name: "DefaultApi", 
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional });
    
     controller.RequestContext.RouteData = new HttpRouteData(
        route: new HttpRoute(),
        values: new HttpRouteValueDictionary { { "controller", "products" } });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-12
      相关资源
      最近更新 更多