2009-12-17 8 views
1

J'ai un articleController qui affiche une liste d'articles en fonction d'une catégorie.Pourquoi est-ce que je testerais l'action de ce contrôleur?

public ActionResult List(string categoryname) 
{ 
     MyStronglyTypedViewData vd = new MyStronglyTypedViewData(); 

     DBFactory factory = new DBFactory(); 

     categoryDao = factory.GetCategoryDao(); 
     articleDao = factory.GetArticleDao(); 


     vd.Category = categoryDao.GetByName(categoryname); 
     vd.Articles = articleDao.GetByCategoryId(vd.Category.Id); 


     return View(vd); 
} 

Si je devais effectuer un test unitaire de cette action, quel serait exactement le but? Pour vous assurer que la vue correcte est ouverte?

Répondre

8
  1. Assurez-vous qu'un ViewResult est retourné
  2. Assurez-vous que le résultat de la vue a un modèle
  3. Assurez-vous que ce modèle est non nul et est de type MyStronglyTypedViewData
  4. propriétés Assert sur le modèle

Cette ligne DBFactory factory = new DBFactory(); me fait penser qu'il serait difficile d'écrire un test unitaire parce que vous n'utilisez pas une interface qui pourrait être raillée, mais plutôt compter sur une classe concrète qui pourrait frapper la base de données réelle.

3

Considérez également les cas d'erreur: categoryname est une chaîne du Web. Comment l'action devrait-elle se comporter si l'utilisateur a passé un "mauvais"? Il me semble que vous pourriez avoir une erreur de référence nulle?

Il est tout aussi important de tester les cas d'erreur que les cas fonctionnels.

1

essai divers cas de pointe dans les objets retournés par categoryDao.GetByName(categoryname); et articleDao.GetByCategoryId(vd.Category.Id); test ce qui se passe quand ils jettent des exceptions

En outre, si vous croyez que votre conception pourrait être mieux si elle a adhéré à la Dependency Inversion Principle (je veux juste dire " si vous devez croire qu'il s'agit d'une question distincte), alors essayer d'écrire un test unitaire bien isolé pour votre méthode et briser les dépendances pourrait être un exercice utile menant à une conception améliorée de votre programme.

1

C'est ce que notre équipe a conclu que ce qui doit être vérifié (nous utilisons BDD) pour chaque contrôleur:

  • Vérifiez chaque action renvoie le nom de la vue correcte.
    • Vérifiez que chaque ViewName est correctement déclenché et renvoyé si l'action peut renvoyer plusieurs vues.
    • Vérifiez que ViewData retourné est entièrement rempli et que le type est correct.
  • Vérifiez que le contrôleur effectue une bulle pour corriger les exceptions correctes.
    • Vérifiez que toutes les RuleViolations bulles du service/modèle sont contenues dans ViewData. (ceci va au-delà des violations de contraintes de données dans la demande)