我正在尝试创建单元测试以确保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));
}
答案 0 :(得分:4)
答案 1 :(得分:0)
要创建UrlHelper
,您需要RequestContext
。要创建有效的RequestContext
,您需要HttpContextBase
和RouteData
。第二个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
。