单元测试UrlHelper扩展方法

时间:2010-04-19 20:41:52

标签: asp.net-mvc unit-testing mvccontrib-testhelper

我正在尝试创建单元测试以确保UrlHelper的扩展方法有效吗?有谁知道如何做到这一点?我正在使用MVC 1.0和MvcContrib。我可以测试路线但不能测试这样的代码:

    public static string MoreFloorplans(this UrlHelper urlHelper, long productID, int pageIndex)
    {
     return urlHelper.Action<CatalogController>(x => x.GetRelatedProducts(productID, pageIndex));

    }

2 个答案:

答案 0 :(得分:4)

答案 1 :(得分:0)

要创建UrlHelper,您需要RequestContext。要创建有效的RequestContext,您需要HttpContextBaseRouteData。第二个RouteData应该很容易构建。 HttpContextBase,你必须嘲笑。

为此,我建议你看看Scott H的MvcMockHelpers。部分内容有点旧,但我认为这对于这个特定的测试来说已经足够了 - 你真正需要的只是FakeHttpContext方法及其依赖项。如果您选择该库,您的代码将类似于:

[TestMethod]
public void Can_write_more_floorplans()
{
    const long productID = 12345;
    const int pageIndex = 10;

    var httpContext = FakeHttpContext();  // From the MvcMockHelpers
    var routeData = new RouteData();
    var requestContext = new RequestContext(httpContext, routeData);
    var urlHelper = new UrlHelper(requestContext);
    string floorplans = MoreFloorplans(urlHelper, productID, pageIndex);
    Assert.AreEqual(some_string, floorplans);
}

我知道你说你正在尝试使用MvcContrib TestHelper项目,但据我所知,该库是关于测试控制器的。我不确定它是否足够精细以测试较低级别的组件。无论如何你根本不需要所有的东西;您只需要RequestContext