测试ASP.NET MVC控制器Httpget

本文关键字:控制器 Httpget MVC NET ASP 测试 | 更新日期: 2023-09-27 18:22:13

我们刚刚开始使用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类URLl不是setter,所以我很困惑如何测试这个功能?

测试ASP.NET MVC控制器Httpget

关于测试,请阅读上面评论中提供的链接,但我建议您阅读MVC路由或此处,它正是您想要实现的。

看看你的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框架的开箱即用路线。

路由将根据您给它们的约定匹配一个url。

因此,基于上面的默认路线,并给出一个类似这样的url:

http://localhost:portnumber/MyController/MyAction/8B4B93DE-76CA-4552-B4AA-460400761EAD

它将尝试将此url与名为MyController的控制器匹配,并使用名为MyAction的操作来接收和Id。只有在所有条件匹配的情况下,它才会命中此操作。

如果URL中没有id,并且在操作方法上定义的id不是可为null的类型,那么它就不会执行。它宁愿尝试匹配另一个Url,如果找不到,它会给出404。

像这样:

public class MyController : Controller {
    [HttpGet]
    Public ActionResult MyAction(Guid id)
    {
    }  
}