2014-07-22 194 views
0

我有一個webapi控制器,我試圖單元測試。不過,我正在努力解決不同類型的ControllerContext。我看到的大部分代碼示例都是關於測試MVC控制器而不是Web API控制器。當我運行該應用程序單元測試WEBAPI控制器

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

但是當我嘗試運行它作爲一個單元測試,它失敗

public class OrdersController : ApiController 
{ 

我有這樣的代碼,其工作原理:

控制器被定義爲。我調試了它,發現運行單元測試時Url爲null,而如果我通常運行系統Url是System.Web.Http.Routing.UrlHelper類型的對象。

任何想法如何讓我的Url.Route()運行時運行單元測試?

回答

1

對於Web API 2中的單元測試,更容易的選項是爲您的控制器實例提供UrlHelper的模擬版本。下面的例子使用Moq

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

如果您使用的網絡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" } }); 
3

如果你不想嘲笑和配置控制器爲單位,路線和集成測試,你可以使用這個庫,這使得整個過程變得更容易。它可以在這裏找到:https://github.com/ivaylokenov/MyTested.WebApi如果你覺得它很有趣,你可以看看。