私は Aaronaught と Scott H の指示に従いましたが、少し間抜けでした。私はこのようなものになりました。
public UrlHelper GetUrlHelper(
string fileName = "/",
string url="http://localhost",
string queryString="")
{
// Use routes from actual app
var routeCollection = new RouteCollection();
MvcApplication.RegisterRoutes(routeCollection);
//Make a request context
var request = new HttpRequest(fileName, url, queryString);
var response = new HttpResponse(new StringWriter());
var httpContext = new HttpContext(request, response);
var httpContextBase = new HttpContextWrapper(httpContext);
var requestContext = new RequestContext(httpContextBase, new RouteData());
// Make the UrlHelper with empty route data
return new UrlHelper(requestContext, routeCollection);
}
public void MoreFloorplans_ReturnsExpectedUrl()
{
var urlHelper = GetUrlHelper();
var actualResult = urlHelper.MoreFloorPlans(1,2);
Assert.AreEqual("/MoreFloorPlans/1/2", actualResult);
}
UrlHelper 自体ではなく、拡張メソッドをテストする必要があることに注意してください。そのため、RequestContext で RouteData を設定することはおそらく範囲外です。