Ce fait suite à ce sujet:méthode du contrôleur de test + DataAnnotations - asp.net mvc 3
Est-ce une bonne façon de vérifier si la validation basée sur DataAnnotations fonctionne dans le contrôleur:
[Test]
public void UserController_CannotCreateUserWithNoLastName()
{
// Arrange
var user = new CreateUserViewModel();
UsersController controller = new UsersController();
var validationContext = new ValidationContext(user, null, null);
var validationResults = new System.Collections.Generic.List<ValidationResult>();
Validator.TryValidateObject(user, validationContext, validationResults);
foreach (var validationResult in validationResults)
{
controller.ModelState.AddModelError("", validationResult.ErrorMessage);
}
// Act
var result = controller.CreateUser(user);
// Assert
Assert.IsFalse(controller.ModelState.IsValid);
}
Toute suggestion d'amélioration serait la bienvenue. Je me demande aussi si on écrit habituellement un test pour chaque règle de validation/métier. Merci!
Merci. Ce que vous avez écrit est logique et oui mon code est inspiré par le lien que vous mentionnez dans votre première question. Votre test est très fin. Comptez-vous que ce que je fais est faux - voyez la méthode du contrôleur comme une unité où je passe dans des modèles qui violent certaines règles d'affaires? Vous auriez à écrire des tests pour vérifier votre contrôleur alors que je ne le ferais pas. Tous les commentaires bienvenus ... – cs0815
Je ne vois pas nécessairement quelque chose de mal avec cela. Ce que vous avez ci-dessus ne teste pas un état spécifique ou une erreur attendue (c'est une chose que je voudrais souligner en regardant le titre de la méthode de test, êtes-vous sûr que c'est tout ce qui est en train de tester?). Il regarde tout. Personnellement, je veux des tests spécifiques pour tester chaque annotation individuelle ou état d'erreur possible, mais si vous êtes à l'aise avec une routine de test un peu plus générique, cela fonctionne également. – Khepri