Comment JUnit tests @exiger une autorisation préalable de l'annotation et de ses printemps EL spécifié par un Contrôleur spring MVC?
J'ai défini cette méthode dans mon Contrôleur Spring MVC :
@RequestMapping(value = "{id}/content", method=RequestMethod.POST)
@PreAuthorize("principal.user.userAccount instanceof T(com.anonym.model.identity.PedagoAccount) AND principal.user.userAccount.userId == #object.pedago.userId AND #form.id == #object.id")
public String modifyContent(@PathVariable("id") Project object, @Valid @ModelAttribute("form") ProjectContentForm form) {
....
}
Ensuite dans mon test JUnit je tiens à appeler cette méthode et de s'assurer que les exiger une autorisation préalable de la condition est vérifiée. Mais quand j'ai mis le nom d'utilisateur principal dans mon test JUnit avec un mauvais compte, il n'y a pas d'erreur et que la méthode est terminée. Il semble que l'annotation est court-circuité.
Mais quand j'ai appeler cette méthode dans des conditions normales (pas de test), le exiger une autorisation préalable est vérifiée.
Si c'est possible, comment faire pour tester cette annotation dans un test unitaire et comment attraper l'exception si il jette un ?
Merci,
Nicolas
OriginalL'auteur Nico | 2011-03-23
Vous devez vous connecter pour publier un commentaire.
Puisque vous voulez tester des fonctionnalités mises en œuvre par Spring AOP, vous devez utiliser Printemps TestContext cadre de l'exécution des tests contre le contexte de l'application.
Ensuite, vous créez une base de test avec un minimum de configuration de la sécurité:
abstract-security-test.xml
:AbstractSecurityTest.java
:Maintenant, vous pouvez l'utiliser dans vos tests:
Merci, cela fonctionne très bien pour l'authentification, mais si je veux tester l'ensemble de Printemps EL définis dans le exiger une autorisation préalable de l'annotation, comment dois-je faire ? Je veux dire comment vérifier principal.de l'utilisateur.compteutilisateur.userId == #de l'objet.pedago.l'id utilisateur ET le #forme.id == #de l'objet.id #objet et #forme désigner les variables de la modifyContent méthode. Est-il une exception à attraper pour un non vérifié la sécurité de Printemps EL ?
Mis à jour.
@ExpectedException annotation est obsolète; utilisation JUnit4 @Test(prévu=...) à la place.
Formidable conseils. Cela fonctionne très bien pour moi. Une chose que j'ai un peu différent, c'est que je me suis séparé de mon existants
security-context.xml
de monwebapp-context.xml
afin que je puisse utiliser le contexte de sécurité de la configuration dans mes tests, sans que la web app choses. De cette façon, je peux réutiliser l'existant sécurité config dans mes tests.OriginalL'auteur axtavt