2009-04-06 3 views
7

J'ai une méthode de contrôleur qui renvoie un RedirectToActionResult (succès!) Ou un ViewResult (échoué avec des messages d'erreur).Est-il possible de tester un certain nombre de résultats AddModelError dans ASP.NET MVC?

Si la logique métier échoue, j'ajoute les messages d'erreur à la propriété AddModelError.

Y at-il un moyen que je peux tester dans mes tests de l'unité MS? J'ai aussi Moq, si cela aide aussi. (Je ne crois pas que Moq est nécessaire pour ce scénario si) .. Je n'utilise rien de l'objet Request.

Répondre

7

Oui, compris.

// Arrange. 
// .. whatever .. 

// Act. 
var viewResult = controller.Create(new Post()) as ViewResult; 

// Assert. 
Assert.IsNotNull(viewResult); 
Assert.IsNotNull(viewResult.ViewData.ModelState["subject"]); 
Assert.IsNotNull(viewResult.ViewData.ModelState["subject"].Errors); 
Assert.IsTrue(viewResult.ViewData.ModelState["subject"].Errors.Count == 1); 
6

Vous pouvez (également) tester le contrôleur directement (sans tester la vue) comme suit:

// Arrange. 
// .. 

// Act. 
controller.Create(new Post()); // missing UserName will invalidate Model with "Please specify your name" message 

// Assert 
Assert.IsTrue(! controller.ModelState.IsValid); 
Assert.IsTrue( controller.ModelState["UserName"].Errors.Any(modelError => modelError.ErrorMessage == "Please specify your name")); 
Questions connexes