2011-11-02 176 views

回答

4

包裝UrlHelper並用所需的方法編寫接口。

然後註冊一個工廠類:

container.RegisterType<IUrlFactory, UrlFactory>(); 

隨着接口:

public interface IUrlFactory 
{ 
    IUrlWrapper Create(); 
} 

然後在實現你可以這樣做:

class UrlFactory : IUrlFactory 
{ 
    public IUrlWrapper Create() 
    { 
     var context = new HttpContextWrapper(HttpContext.Current); 
     var routeData = RouteTable.Routes.GetRouteData(context); 
     return new UrlWrapper(new UrlHelper(new RequestContext(context, routeData))); 
    } 
} 

而當你想寫測試嘲笑的網址,你可以做這樣的事情(使用最小起訂量):

var urlMock = new Mock<IUrlWrapper>(); 
urlMock.Setup(x => x.GetSubDomain()).Returns(string.Empty); 

var urlFactoryMock = new Mock<IUrlFactory>(); 
urlFactoryMock.Setup(x => x.Create()).Returns(_urlMock.Object);