2011-09-20 2 views
0

J'essaie d'apprendre le Moq mais cela s'avère quelque peu difficile.Contrôleur de compte MVC3 Moq C# nUnit

Si je veux implémenter des tests de base en utilisant nUnit et Moq pour le contrôleur de compte dans un nouveau projet MVC3, comment j'y procéderais?

Im utilisé pour le cadre d'entité. mais pas de construire des interfaces pour cela.

modifier: Je comprends la théorie de tout et la nécessité de le faire, mais sa mise en œuvre est me confondre

J'utilise pour générer du code générateur de code entité (dbContext) Je peux utiliser pour les interfaces

Répondre

0

Ok, voici un bon test: Lorsque vous enregistrez un nouvel utilisateur, vous voulez vous assurer qu'il sera automatiquement connecté sur le site, il n'a donc plus besoin de taper son nom d'utilisateur et son mot de passe.

Le test serait quelque chose comme ceci:

public void AutomaticallySignedInAfterRegistering() 
{ 
    var membershipService = new Mock<IMembershipService>(); 
    var formsService = new Mock<IFormsAuthenticationService>(); 
    RegisterModel newUser = new RegisterModel(); 
    newUser.UserName = "John" 
    newUser.Email = "[email protected]" 
    newUser.Password = "[email protected]"; 
    newUser.ConfirmPassword = "[email protected]"; 

    membershipService.Setup(x => x.CreateUser("John", "[email protected]", "[email protected]")).Returns(MembershipCreateStatus.Success); 

    AccountController controller = new AccountController(); 
    controller.FormsService = formsService.Object; 
    controller.MembershipService = membershipService.Object; 

    controller.Register(newUser); 

    formsService.Verify(x => x.SignIn("John", false), Times.Once()); 
} 

La clé est la méthode Vérifiez ici. Cela fonctionne comme un assert. Dans ce cas, vous vérifiez que la méthode SignIn a été appelée une seule fois. Voici un exemple d'utilisation de mocks pour vérifier si le contrôleur de compte fonctionne comme prévu.

+0

Merci, c'est un bon test pour commencer. Une question cependant, quel est le moyen le plus simple de créer une interface pour mes entités de structure d'entité EDMX? J'ai "DBContext Generator" installé, mais il ne crée pas d'interfaces, juste des classes pour chaque entité (Toutes les fonctions correctes sont là cependant) – JustAnotherDeveloper

+0

Envelopper le DbContext dans une classe personnalisée. Je vais généralement pour une interface comme 'IDbContext' et une classe nommée 'EntityFrameworkDbContext'. Cette classe utilisera en interne le DbContext créé sur l'EDMX. Tous vos contrôleurs et services utiliseront le IDbContext. – goenning

Questions connexes