2010-04-29 5 views
1

Допустим, у меня есть простой контроллер для ASP.NET MVC, который я хочу протестировать. Я хочу проверить, что действие контроллера (в этом случае Foo) просто возвращает ссылку на другое действие (в этом случае Bar).Как протестировать этот простой ASP.NET MVC-контроллер

Как бы вы протестировали TestController.Foo? (либо первая, либо вторая ссылка)

Моя реализация имеет одинаковую ссылку дважды. Один пропускает URL-адрес ViewData []. Это кажется более проверяемым для меня, поскольку я могу проверить коллекцию ViewData, возвращенную из Foo(). Даже в этом случае я не знаю, как проверить подлинность самого 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> 

ответ

1

Метод 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"); 
} 
+0

Спасибо. Я уточню свой вопрос, хотя, поскольку Foo был тем, что меня интересовало. Ответ в связанном вопросе довольно тяжелый, я был удивлен, что ему нужно столько всего, чтобы проверить его, и надеялся, что есть более быстрый подход. –

Смежные вопросы