RestAssured Junit et tests Session
Rédigé par gorki Aucun commentaireLe problème :
RestAssured est un framework de tests pour les services Rest avec un langage assez simple.
Le seul problème est qu'il demande à ce qu'un serveur soit démarré, ce qui est toujours un peu lent pour les tests unitaires.
Heureusement, est inclu RestAssuredMockMvc qui permet de mocker le serveur, faire "comme si" on avait un serveur, très bien !
Problème :
- Dans un de mes tests j'utilisent des informations stockées en session
Autant RestAssured a prévu le coup et a des méthodes pour ça (cf SessionFilter) côté client, autant la partie RestassuredMockMvc n'a rien de tout ça dans la partie serveur simulé.
Solution :
J'ai pas mal tatonné/recherché, mais finalement une solution assez simple et non intrusive :
// Création de la requête de test avec serveur simulé (le given() de RestassuredMockMvc) MockMvcRequestSpecification request = given().standaloneSetup(controller); // Création d'un session vide final MockHttpSession session = new MockHttpSession(); // On ajoute un interceptor pour indiquer lors de la construction de la requête d'utiliser notre session request.interceptor(new MockHttpServletRequestBuilderInterceptor() { @Override public void intercept(MockHttpServletRequestBuilder requestBuilder) { requestBuilder.session(session); } }); // on peut ensuite enchainer les appels, la session sera la même request.queryParam(...).when(...)... request.queryParam(...).when(...)...
Donc côté serveur simulé, on intercepte le constructeur pour lui donner une session vide (mais non null). On pourrait imaginer un système plus complexe pour gérer le fait qu'au premier appel la session devrait être null, mais on va s'arrêter là pour l'instant.