Я написал несколько методов расширения для UrlHelper в моем проекте ASP.NET Core. Теперь я хотел бы написать для них модульные тесты. Однако многие из моих методов расширения используют методы UrlHelper (например, Action), поэтому мне нужно передать рабочий UrlHelper в аргумент this
(или рабочий UrlHelper для вызова методов).
Как я могу создать работающий UrlHelper? Я попробовал это:
Mock<HttpContext> mockHTTPContext = new Mock<HttpContext>();
Microsoft.AspNetCore.Mvc.ActionContext actionContext = new Microsoft.AspNetCore.Mvc.ActionContext(
new DefaultHttpContext(),
new RouteData(),
new ActionDescriptor());
UrlHelper urlHelper = new UrlHelper(actionContext);
Guid theGUID = Guid.NewGuid();
Assert.AreEqual("/Admin/Users/Edit/" + theGUID.ToString(), UrlHelperExtensions.UserEditPage(urlHelper, theGUID));
Сбой (Test method Test.Commons.Admin.UrlHelperTests.URLGeneration threw exception:
System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
) с этим стеком вызовов:
at System.Collections.Generic.List`1.get_Item(Int32 index)
at Microsoft.AspNetCore.Mvc.Routing.UrlHelper.GetVirtualPathData(String routeName, RouteValueDictionary values)
at Microsoft.AspNetCore.Mvc.Routing.UrlHelper.Action(UrlActionContext actionContext)
at Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Action(IUrlHelper helper, String action, String controller, Object values)
at <MY PROEJCT>.UrlHelperExtensions.UserEditPage(IUrlHelper helper, Guid i_userGUID)
at <MY TEST>.URLGeneration()
Пример методов расширения следующий:
public static string UserEditPage(this IUrlHelper helper, Guid i_userGUID)
{
return helper.Action(
nameof(UsersController.EditUser),
"Users",
new { id = i_userGUID });
}