Je voudrais écrire (en C#) un test unitaire pour une action du contrôleur MVC qui pourrait renvoyer une vue ou l'autre, selon que la requête est authentifiée. Comment cela peut-il être fait?Comment tester unitairement une action du contrôleur MVC qui dépend de l'authentification dans C#?
Comment tester unitairement une action du contrôleur MVC qui dépend de l'authentification dans C#?
Répondre
Vous pouvez simuler votre demande. Quelque chose comme ça (en utilisant Moq):
var request = new Mock<HttpRequestBase>();
request.SetupGet(x => x.IsAuthenticated).Returns(true); // or false
var context = new Mock<HttpContextBase>();
context.SetupGet(x => x.Request).Returns(request.Object);
var controller = new YourController();
controller.ControllerContext =
new ControllerContext(context.Object, new RouteData(), controller);
// test
ViewResult viewResult = (ViewResult)controller.SomeAction();
Assert.True(viewResult.ViewName == "ViewForAuthenticatedRequest");
En utilisant moqueuse et l'injection de dépendance. Ce qui suit suppose que vous vérifiez qu'il est authentifié, puis accédez à l'objet utilisateur pour obtenir l'ID de l'utilisateur. Utilise RhinoMocks.
// mock context variables
var username = "user";
var httpContext = MockRepository.GenerateMock<HttpContextBase>();
var request = MockRepository.GenerateMock<HttpRequestBase>();
var identity = MockRepository.GenerateMock<IIdentity>();
var principal = MockRepository.GenerateMock<IPrincipal>();
httpContext.Expect(c => c.Request).Return(request).Repeat.AtLeastOnce();
request.Expect(r => r.IsAuthenticated).Return(true).Repeat.AtLeastOnce();
httpContext.Expect(c => c.User).Return(principal).Repeat.AtLeastOnce();
principal.Expect(p => p.Identity).Return(identity).Repeat.AtLeastOnce();
identity.Expect(i => i.Name).Return(username).Repeat.AtLeastOnce();
var controller = new MyController();
// inject context
controller.ControllerContext = new ControllerContext(httpContext,
new RouteData(),
controller);
var result = controller.MyAction() as ViewResult;
Assert.IsNotNull(result);
// verify that expectations were met
identity.VerifyAllExpectations();
principal.VerifyAllExpectations();
request.VerifyAllExpectations();
httpContext.VerifyAllExpectations();
merci pour votre réponse qui je suis sûr fonctionne très bien. Depuis que j'ai testé la réponse eu-ge-ne (qui fonctionne bien pour moi) et il était un peu plus rapide avec la réponse, j'ai marqué sa réponse. sans vouloir vous offenser. bonne journée. ;) – Mats
Pas un problème. C'est vraiment la même réponse. Je n'ai quitté que le mien car il montre comment se moquer du principal/de l'identité au cas où vous auriez besoin d'obtenir le nom d'utilisateur - ou la méthode IsInRole sur le principal, ce que je n'ai pas montré. – tvanfosson
- 1. Comment tester l'application ASP.NET qui dépend de l'adresse IP
- 2. Comment tester unitairement cette méthode?
- 3. Comment tester unitairement un plug-in dans une application?
- 4. Comment tester unitairement un DAO qui étend SqlMapClientDaoSupport
- 5. Unité test d'une action du contrôleur Asp.net MVC
- 6. asp.net MVC vue partielle contrôleur action
- 7. Comment tester unitairement les constructeurs de classes immuables?
- 8. Recherche du contrôleur qui a appelé mon contrôleur; ou traversant la pile Controller/Action
- 9. asp.net- mvc passer des variables d'un contrôleur (action) à un autre contrôleur (action)
- 10. Comment fournir une action "succès" à l'utilisateur dans ASP.NET MVC?
- 11. Classe ASP.NET MVC représentant un ensemble contrôleur + action?
- 12. Comment déterminer dans quel contrôleur appartient une action?
- 13. ASP.NET MVC - Action en cours à partir du code du contrôleur?
- 14. Appeler une autre action du contrôleur après l'action du régulateur de courant a terminé son exécution
- 15. Le contrôleur MVC doit-il être dans une DLL séparée?
- 16. ASP.NET MVC avec jqGrid Modification de formulaire - Action du contrôleur pour les options sélectionnées
- 17. Comment trouver le chemin absolu d'une action du contrôleur?
- 18. restful_authentication appliquée à seulement une action dans un contrôleur?
- 19. Comment définir le délai d'expiration de la requête pour une action de contrôleur dans une application mvc asp.net
- 20. thunderdome action invoker asp.net mvc
- 21. Comment tester unitairement une fonction NextPasswordChangeDate par rapport à Active Directory
- 22. Comment câbler manuellement un contrôleur MVC et lui faire rendre une action?
- 23. Utilisation du plug-in jQuery validatation pour envoyer plusieurs valeurs à une action du contrôleur ASP.NET MVC?
- 24. Utilisation de jQuery pour appeler une action de contrôleur
- 25. Est-il possible de transférer l'identité FormsAuthentication de l'utilisateur actuel vers une autre action du contrôleur?
- 26. Comment vérifier si une action du contrôleur est déjà en cours de redirection?
- 27. Pourquoi le test du contrôleur sur une action de création échoue-t-il?
- 28. Fournit des noms d'affichage explicites lorsque l'unité teste une action du contrôleur?
- 29. Afficher l'alerte javascript de l'action du contrôleur dans asp.net mvc
- 30. Comment tester unitairement une méthode statique en utilisant un faux objet pour la dépendance?
soignée. Merci pour votre réponse. ;) – Mats
Cela ne fonctionne pas pour moi - renvoie le même nom de vue indépendamment de vrai/faux – Kev