0
有沒有人嘲笑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
}
我希望爲段用我的墊片獲取並返回我的區隔清單。
我的代碼在我的web上下文中運行時工作,我只需要找到一種方法來對它進行單元測試,第一步是嘲笑填充/存根這個request.GetFriendlyUrlSegments()調用。
爲了使您的代碼可測試,你應該使用一個注入'HttpContextBase',而不是'HttpContext.Current'。 – SLaks
@Slaks,這是一個很好的觀點,但是我不清楚這將如何幫助我填充Request.GetFriendlyUrlSegments()的方法調用。你能詳細說明嗎? – twifosp
嗯;進一步看,它不會在這裏幫助,除非'GetFriendlyUrlSegments'擴展方法的實現使用你可以假冒的數據。 (嘗試一個反編譯器?) – SLaks