我们刚开始使用ASP.NET MVC3,我们想要对我们的控制器进行单元测试。
这是我的控制器功能:
[HttpGet]
Public ActionResult Action()
{
Guid Id = Guid.Empty;
string[] UrlSegments = Request.Url.Segments;
Guid.TryParse(UrlSegments[UrlSegments.Count() - 1], out Id);
if(Id == Guid.Empty)
return RedirectToAction("ErrorPage");
}
我想测试这个控制器函数。我已经在我的global.asax文件中放置了匹配此函数的匹配路由。基本上我试图从URl中检索guid,如果它不好,那么把他带到错误页面。 HttpRequestBase类URl没有setter,所以我很困惑如何测试这个功能?
答案 0 :(得分:0)
至于测试,请阅读comments above中提供的链接,但我建议您在MVC Routing或here上进行一些阅读,它完全符合您的目标。
查看你的global.ascx.cs文件,你会发现这样的东西:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
这是MVC框架的开箱即用路线。
路由将根据您提供的约定匹配网址。
所以基于上面的默认路线并给出这样的网址:
http://localhost:portnumber/MyController/MyAction/8B4B93DE-76CA-4552-B4AA-460400761EAD
它将尝试将此url与名为MyController的控制器匹配,并使用名为MyAction的操作来接收和Id。只有在所有条件都匹配时才会执行此操作。
如果URL中没有id,并且在action方法上定义的id不是可空类型,那么它就不会执行了。它宁愿尝试匹配另一个Url,如果它找不到它会给404。
像这样:
public class MyController : Controller {
[HttpGet]
Public ActionResult MyAction(Guid id)
{
}
}