2009-10-22 2 views
1

Je fonctionnalités ajoutées au contrôleur des comptes -> Enregistrement fonction ActionValidateRegistation pour tester les blancs dans le formulaire d'inscription de l'utilisateur. Je veux maintenant jeter une erreur au formulaire si l'adresse e-mail que l'utilisateur a entré est déjà dans le système. J'ai ajouté la fonction vérifiant l'adresse email en double à la fin de la fonction ValidateRegistration.Comment tester les adresses e-mail en double dans .NET MVC

J'utilise LINQ pour interroger la base de données pour créer une liste d'utilisateurs et de vérifier le courrier électronique si elle a déjà été utilisé qui fonctionne bien pendant l'exécution. J'ai créé un test de base visuel avec tester l'objet utilisateur (nom d'utilisateur, mot de passe, etc.) pour une adresse e-mail en double pendant l'action d'inscription. Comment éviter le ValidateRegistration d'interroger la base de données et de créer une liste d'utilisateurs (ce que je veux pendant l'exécution), mais plutôt de valider ValidateRegistration avec de faux objets utilisateur lors des tests unitaires?

Exemple de code: Comptes Contoller

public ActionResult Register(string username... string password...) 
    { 

      //Call the ValidateRegistration(string username... string password...); 

      //Add user if ValidateRegistration checks have passed 
    } 

ValidateRegistration public (nom d'utilisateur string ... string password ...) {// Vérifiez le nom d'utilisateur si elle est vide // ModelState.AddModelError (nom d'utilisateur est vide)

// vérifier la longueur du mot de passe // ModelState.AddModelError (mot de passe est trop court un message)

// Liste lstUsers = GetUsers(); // vérifier si l'adresse e-mail est déjà utilisée // ModelState.AddModelError (adresse e-mail déjà utilisée)

// Comment tester l'adresse e-mail ci-dessus?

}

SampleCode: Unités Tests

public void RegisterPostReturnsViewIfFirstnameNotSpecified() 
    { 
     // Arrange 
     AccountController controller = GetAccountController(); 

     // Act 
     ViewResult result = (ViewResult)controller.Register(string username... string password...) 

     // Assert 
     Assert.AreEqual(6, result.ViewData["PasswordLength"]); 
     Assert.AreEqual(See if error message is equal); 
    } 

Répondre

0

Vous devriez regarder dans "injection de dépendance" ou "Inversion of Control". Il existe un certain nombre de conteneurs IoC populaires qui vous permettront de configurer quels types sont créés lors de l'exécution lorsque vous demandez un nouvel objet (couche d'accès à la base de données [DAL] dans votre cas).

Avec DI la prémisse de base est que vous dites à votre contrôleur à « utiliser ce DAL », plutôt que le contrôleur de décider quel DAL à utiliser. Avec IoC, vos tests unitaires configurent quelles classes sont créées lorsque quelqu'un demande une DAL, et votre contrôleur demande un DAL au conteneur.

Un très bon point de départ pour cela est Martin Fowler's article.

Questions connexes