2013-06-30 146 views
0

我有以下的代碼行中我的控制器/動作需要模擬Url.RouteUrl的單元測試

var defaultRoute = Url.RouteUrl("Default", new { action = "MyAction", controller = "MyController", id = 1 }); 

我寫一個單元測試,並需要模擬這條線,使其返回一些網址。我沒有得到我如何能做到這一點。任何人都可以幫助我爲這條線寫一篇測試。

感謝

+0

什麼是解決方法?我如何使我的單元測試忽略Url.RouteUrl行 – InTheWorldOfCodingApplications

回答

0

你總是可以創建不可測一個包裝類,然後嘲笑說:

public interface IUrlRouterWrapper 
{ 
    // Put any methods you want to mock here... 
    void RouteUrl(string routeName, RouteValueDictionary routeValues); 
} 

public class UrlRouterWrapper : IUrlRouterWrapper 
{ 
    // ... and implement them here, calling through to the real, non-testable class. 
    public void RouteUrl(string routeName, RouteValueDictionary routeValues) 
    { 
     Url.RouteUrl(routeName, routeValues); 
    } 
} 

然後在你的代碼,使用RouteUrl:

public class SomeOtherClass 
{ 
    private readonly IUrlRouterWrapper _urlRouterWrapper; 

    public SomeOtherClass(IUrlRouterWrapper urlRouterWrapper) 
    { 
     _urlRouterWrapper = urlRouterWrapper; 
    } 

    public void DoThings() 
    { 
     // ... 
     _urlRouterWrapper.WrapUrl("Default", new { action = "MyAction", controller = "MyController", id = 1 }); 
     // ... 
    } 
} 

現在你有一個easily-可嘲弄的界面,IUrlRouterWrapper,你可以測試你的心臟的內容。