【发布时间】:2014-02-21 16:03:05
【问题描述】:
有没有人嘲笑 FriendlyUrls 进行单元测试?
我正在编写一个需要模拟 asp.net FriendlyUrls 的测试。我需要专门模拟的调用是 Request.GetFriendlyUrlSegments()。我正在使用 MS 假货。
这是我目前的测试:
// 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
}
我希望分段使用我的 shim 获取并返回我的分段列表。
当我在 web 上下文中运行我的代码时,我只需要找到一种对其进行单元测试的方法,第一步是模拟 shim/stub 这个 request.GetFriendlyUrlSegments() 调用。
【问题讨论】:
-
为了使您的代码可测试,您应该使用注入的
HttpContextBase而不是HttpContext.Current。 -
@Slaks,这是一个很好的观点,但是我不清楚这将如何帮助我填充 Request.GetFriendlyUrlSegments() 的方法调用。你能详细说明一下吗?
-
嗯;进一步看,它在这里无济于事,除非
GetFriendlyUrlSegments扩展方法的实现使用您可以伪造的数据。 (尝试反编译器?) -
好建议。检查 dll 显示该方法生成 (string)httpRequest.GetRouteData().DataTokens["FriendlyUrlFileExtension"] ?? string.Empty;
标签: asp.net unit-testing friendly-url microsoft-fakes