2010-04-29 7 views
1

Disons que j'ai un contrôleur simple pour ASP.NET MVC que je veux tester. Je veux tester qu'une action de contrôleur (Foo, dans ce cas) renvoie simplement un lien vers une autre action (Bar, dans ce cas).Comment tester ce simple contrôleur ASP.NET MVC

Comment testeriez-vous TestController.Foo? (soit le premier ou le deuxième lien)

Mon implémentation a le même lien deux fois. On passe l'url throw ViewData []. Cela me semble plus testable, car je peux vérifier la collection ViewData retournée par Foo(). Même ainsi, je ne sais pas comment valider l'URL elle-même sans faire de dépendances sur le routage.

Le contrôleur:

public class TestController : Controller 
{ 
    public ActionResult Foo() 
    { 
     ViewData["Link2"] = Url.Action("Bar"); 
     return View("Foo"); 
    } 

    public ActionResult Bar() 
    { 
     return View("Bar"); 
    } 

} 

le "Foo" Vue:

<%@ 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> 

Répondre

1

La méthode Foo est en fait moins facilement testable car il utilise la propriété .URL (de type UrlHelper) de la La classe de base de TestController qui n'est pas pré-remplie. Si vous souhaitez suivre le chemin de l'objet UrlHelper, le message suivant décrit comment s'y prendre: ASP.NET MVC: Unit testing controllers that use UrlHelper.

La méthode Bar d'autre part, est plus-testable car il ne pas utiliser la propriété 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

Merci. Je vais clarifier ma question, car Foo était ce qui m'intéressait. La réponse à la question liée est assez lourde, j'étais surpris qu'il en fallait autant pour la tester et j'espérais qu'il y aurait une approche plus rapide. –

Questions connexes