C# WebApi les Tests Unitaires et les Moqueries des Contrôleurs
Je suis en train de travailler sur ce WebAPI projet et j'ai besoin de créer des tests unitaires pour. La base du projet a été créé à l'aide de VS 2010 , puis une WebApi Module a été ajouté.
Le fonctionnement de la manette sont plutôt de prendre le chemin de l'essai/de moqueries. Je suis à l'aide de xUnit et Moq , mais il n'y a absolument pas besoin de coller avec ces deux.
L'application utilise des objets spécifiques pour traiter les accès de base de données, j'ai donc l'
controllerObject et son constructeur exige la DataAccessObject
Je vais avoir des problème avec se moquer de la contrôleur /dataaccess paire. Le premier test im essayant de course est un GetAllFromDataBase, mais je n'ai pas vraiment avoir une idée sur la façon de le faire.
EDIT:
J'ai fait ce que Cuong Le dit à moi et l'ensemble se déplace maintenant, j'ai vraiment aprécier. Mais je perplexe dans un autre problème. Pour accéder à l'API, il y a un nom d'utilisateur/mot de passe et mon contrôleur utilise du Fil.CurrentPrincipal.L'identité.Nom; maintenant j'aurais besoin de définir cette valeur pour qu'il puisse pleinement de travail, je suppose.
Également la valueServiceMock.Le programme d'installation(service => service.GetValues())
.Retourne(new[] { "valeur1", "valeur2" });
ne semble pas fonctionner. comme le code essaie d'atteindre, pour la base de données, et ne reçoit rien, car il ne peux pas obtenir un nom d'utilisateur valide pour chercher
Avez-vous vérifier que vous passez maquette de l'objet via le constructeur comme ceci: var controller = new ValuesController(valueServiceMock.D'un objet);
OriginalL'auteur oSR | 2012-08-03
Vous devez vous connecter pour publier un commentaire.
Afin d'obtenir votre application testable, vous avez besoin de conception pour la testabilité à l'esprit.Techniquement, à la conception pour la testabilité, votre application doit être couplage lâche, autant que possible, entre les couches, entre les composants et le même entre les classes.
Beaucoup de conseils à la conception pour la testabilité: éviter scellé, classe statique... Mais la chose la plus populaire, vous devez être conscient de est l'injection de dépendance modèle, au lieu de créer un objet à l'intérieur de contructors à des méthodes ou à d'autres objets, cet objet doit être injecté. Avec cette façon de nous faire perdre de dépendance entre la classe et facile pour nous de faux par se moquer cadre. Esp, pour les objets qui dépendent de la ressource externe: réseau, un fichier ou une base de données.
Comment injecter de l'objet à l'aide de l'injection de dépendance: c'est pourquoi IocContainer est le bon outil pour cela, il va injecter des objets pour vous automatiquement. Conteneur IoC qui je préfère utiliser est: Autofac et NInject.
Exemple ici à injecter ValueService en ValuesController:
Et ci-dessous le code simple pour l'unité de test avec Moq:
J'espérais que je pourrais résoudre ce ici, mais permet de faire une autre question alors!
OriginalL'auteur cuongle