Оберните 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)));
}
}
И когда вы хотите написать тест для макета URL, вы можете сделать что-то вроде этого (используется MOQ):
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);