我有以下的代碼行中我的控制器/動作需要模擬Url.RouteUrl的單元測試
var defaultRoute = Url.RouteUrl("Default", new { action = "MyAction", controller = "MyController", id = 1 });
我寫一個單元測試,並需要模擬這條線,使其返回一些網址。我沒有得到我如何能做到這一點。任何人都可以幫助我爲這條線寫一篇測試。
感謝
我有以下的代碼行中我的控制器/動作需要模擬Url.RouteUrl的單元測試
var defaultRoute = Url.RouteUrl("Default", new { action = "MyAction", controller = "MyController", id = 1 });
我寫一個單元測試,並需要模擬這條線,使其返回一些網址。我沒有得到我如何能做到這一點。任何人都可以幫助我爲這條線寫一篇測試。
感謝
我想我找到與您問題相關線程:How do I MOQ the System.IO.FileInfo class... or any other class without an interface?
的問題是,你可以在還沒有實現一個接口或者具有相應的方法/屬性集不mock類虛擬。
什麼是解決方法?我如何讓我的單元測試忽略Url.RouteUrl線 – InTheWorldOfCodingApplications
你總是可以創建不可測一個包裝類,然後嘲笑說:
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
,你可以測試你的心臟的內容。
什麼是解決方法?我如何使我的單元測試忽略Url.RouteUrl行 – InTheWorldOfCodingApplications