如何单元测试这个简单的ASP.NET MVC控制器
问题描述:
可以说我有一个简单的ASP.NET MVC控制器我想测试。我想测试一个控制器动作(在这种情况下,Foo)只是返回到另一个动作(在这种情况下,酒吧)的链接。如何单元测试这个简单的ASP.NET MVC控制器
你会如何测试TestController.Foo? (无论是第一个还是第二个链接)
我的实现具有相同的链接两次。一个通过url抛出ViewData []。这对我来说似乎更具可测性,因为我可以检查从Foo()返回的ViewData集合。即使这样,但我不知道如何验证url本身,而不依赖路由。
控制器:
public class TestController : Controller
{
public ActionResult Foo()
{
ViewData["Link2"] = Url.Action("Bar");
return View("Foo");
}
public ActionResult Bar()
{
return View("Bar");
}
}
的 “foo” 的视图:
<%@ Page Title="" Language="C#" Inherits="System.Web.Mvc.ViewPage" MasterPageFile="~/Views/Shared/Site.Master"%>
<asp:Content ContentPlaceHolderID="MainContent" runat="server">
<%= Html.ActionLink("link 1", "Bar") %>
<a href="<%= ViewData["Link2"]%>">link 2</a>
</asp:Content>
答
foo的方法实际上是不太容易测试,因为它从使用.URL属性(类型UrlHelper的) TestController的基类不是预先填充的。如果你想沿着UrlHelper对象的路径,那么下面的文章描述了如何去做这件事 - ASP.NET MVC: Unit testing controllers that use UrlHelper。
在另一方面,酒吧的方法,是更容易测试,因为它不使用Controller.Url属性:
[TestMethod]
public void BarRouteReturnsBarViewResult()
{
// Arrange
var controller = new TestController();
// Act
var result = controller.Bar() as ViewResult;
// Assert
Assert.AreEqual(result.ViewName, "Bar");
}
感谢。我会澄清我的问题,因为Foo是我感兴趣的。关联问题中的答案非常重要,我很惊讶它需要做很多测试,并希望有一个更快的方法。 – 2010-04-29 17:04:52