Кто-нибудь издевался над FriendlyUrls для модульного тестирования?Mocking Asp.net FriendlyUrls
Я пишу тест, который должен издеваться над asp.net FriendlyUrls. Вызов, который мне нужно высмеять, это Request.GetFriendlyUrlSegments(). Я использую MS Fakes.
Вот мой тест до сих пор:
// Arrange
var httpContext = TestHelper.StubHtppContext("", "http://localhost/content.aspx/area/controller/action/OtherRouteValue", "");
var httpContextBase = new HttpContextWrapper(httpContext);
RouteTable.Routes.MapRoute(
"RouteName",
"Area/{controller}/{action}/{id}/{OtherRoute}",
new {action = "Index", id = UrlParameter.Optional, OtherRoute = UrlParameter.Optional});
RouteTable.Routes.EnableFriendlyUrls();
var segments = new List<String> {"Controller", "Action", "Id", "OtherRoute"};
using (ShimsContext.Create())
{
ShimHttpContext.CurrentGet =() => httpContext;
ShimFriendlyUrl.SegmentsGet =() => segments;
// Act
RouteData result = MvcUtility.GetRouteValuesFromUrl();
// Assert
Assert.IsNotNull(result, "Expected RouteData to be created.");
}
}
Соответствующая часть тестируемой системы:
public static RouteData GetRouteValuesFromUrl()
{
var request = System.Web.HttpContext.Current.Request;
var segments = request.GetFriendlyUrlSegments();
//Other code
}
Я бы ожидать для сегментов, чтобы использовать мой регулировочную шайбу получить и вернуть мой список сегментов ,
Мой код работает, когда я запускаю его в веб-контексте, мне просто нужно найти способ его протестировать, и первый шаг - насмешливое прошивка/заглушка этого запроса.GetFriendlyUrlSegments().
Чтобы сделать код проверяемых, вы должны использовать инъекции 'HttpContextBase' вместо' HttpContext.Current'. – SLaks
@Slaks. Это хороший момент, однако я не совсем понимаю, как это поможет мне перемыть вызов метода Request.GetFriendlyUrlSegments(). Можете ли вы уточнить? – twifosp
Хм; глядя дальше, это не поможет здесь, если только реализация метода расширения GetFriendlyUrlSegments не использует данные, которые вы можете подделать. (попробуйте декомпилятор?) – SLaks