假设我有一个简单的ASP.NET MVC控制器,我想测试一下。我想测试控制器操作(在这种情况下为Foo)只返回指向另一个操作的链接(在本例中为Bar)。
您如何测试TestController.Foo? (第一个或第二个链接)
我的实现有两次相同的链接。一个传递url throw 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>
答案 0 :(得分:1)
Foo方法实际上不太容易测试,因为它使用了来自TestController的基类的.Url属性(类型为UrlHelper),该类未预先填充。如果您想沿着存根UrlHelper对象的路径前进,那么以下帖子将介绍如何解决这个问题 - ASP.NET MVC: Unit testing controllers that use UrlHelper。
另一方面,Bar方法更容易测试,因为它不使用Controller.Url属性:
[TestMethod]
public void BarRouteReturnsBarViewResult()
{
// Arrange
var controller = new TestController();
// Act
var result = controller.Bar() as ViewResult;
// Assert
Assert.AreEqual(result.ViewName, "Bar");
}