Dans mon projet Spring, j'ai créé des tests qui vérifient les contrôleurs/http-api. Existe-t-il un moyen d'obtenir le contenu json de la réponse en tant qu'objet désérialisé?
Dans d'autres projets, j'ai utilisé le repos assuré et des méthodes pour obtenir des résultats directement en tant qu'objets attendus.
Voici un exemple:
MvcResult result = rest.perform( get( "/api/byUser" ).param( "userName","test_user" ) )
.andExpect( status().is( HttpStatus.OK.value() ) ).andReturn();
String string = result.getResponse().getContentAsString();
La méthode renvoie un type spécifique en tant que json. comment reconvertir ce json en objet pour tester son contenu? Je connais des moyens avec jackson ou avec du repos, mais y a-t-il un moyen au printemps/test/mockmvc
Comme getContentAs(Class)
Pour autant que je sache, MockHttpServletResponse
(contrairement à RestTemplate) n'a pas de méthode qui pourrait convertir le json retourné en un type particulier
Donc ce que vous pourriez faire est d'utiliser Jakson ObjectMapper
pour convertir la chaîne json en un type particulier
Quelque chose comme ça
String json = rt.getResponse().getContentAsString();
SomeClass someClass = new ObjectMapper().readValue(json, SomeClass.class);
Cela vous donnera plus de contrôle pour affirmer différentes choses.
Ayant dit cela, MockMvc::perform
renvoie ResultActions
qui a une méthode andExpect
qui prend ResultMatcher
. Cela a beaucoup d'options pour tester le json résultant sans le convertir en objet.
Par exemple
mvc.perform( .....
......
.andExpect(status().isOk())
.andExpect(jsonPath("$.firstname").value("john"))
.andExpect(jsonPath("$.lastname").value("doe"))
.andReturn();