2009-11-18 2 views
0

Dans mes tests unitaires, je trouve que lorsque je reviens d'une action du contrôleur utilisant View() sans nom de vue, ViewResult.ViewName est défini sur string.Empty. Pour que cela soit défini, il doit être spécifié en tant que paramètre de l'appel View(). Par exemple, étant donné le test unitaire suivant:Pourquoi la spécification du nom de vue n'entraîne pas l'échec de mon test d'unité?

[TextFixture] 
public class MyControllerTests 
{ 
    [Test] 
    public void TestMyAction() 
    { 
     var controller = new MyController(); 
     var result = controller.MyAction(); 

     Assert.AreEqual("MyAction", result.ViewName); 
    } 
} 

La mise en œuvre des actions suivantes provoquera le test unitaire à l'échec:

public class MyController : Controller 
{ 
    public ActionResult MyAction() 
    { 
     return View(); 
    } 
} 

alors que celui-ci passera:

public class MyController : Controller 
{ 
    public ActionResult MyAction() 
    { 
     return View("MyAction"); 
    } 
} 

Je m en utilisant ASP.NET MVC 2 (pré-bêta) sur .NET 4.0. Cependant, je n'utilise rien de particulier à .NET 4.0. Je trouve ce comportement étrange parce que j'avais pensé que le ViewName était l'une des propriétés fiables qui pouvaient être vérifiées dans les assertions des tests unitaires.

Répondre

3

Ceci est une "caractéristique" bien connue de ASP.NET MVC. Microsoft l'a documenté depuis la première version ...

Lorsque aucun nom de vue explicite n'est spécifié, le framework tente d'en trouver un basé sur des conventions (dans "Views \ controllername \ actionname" ou "Shared \ controllername \ actionname"). ViewName n'est pertinent que si vous souhaitez déroger à cette convention. Donc, votre test unitaire fait de fausses hypothèses.

HTH.

+0

Je vois. Y a-t-il un article/post/quoi que ce soit sur les assertions appropriées à faire? – alastairs

+0

Pas un seul. Si vous google pour quelque chose comme "asp.net mvc unit testing", vous obtenez des centaines d'articles/articles de blog qui traitent de ce problème. Cela dépend totalement de ce que vous voulez tester. –

Questions connexes