Je suis nouveau dans le modèle de repos de démarrage de printemps. J'essaie d'écrire un boîtier de test d'unité pour le modèle de repos post-appel. J'ai créé un contrôleur d'utilisateur pour envoyer les données factices. L'Usercontroller est-il écrit pour Post Call est correct pour le test de l'unité? Sinon, quelle est la bonne façon de l'écrire? Est-ce que la réponse que je reviendrai de Usercontroller est-elle correcte? Devrais-je retourner le code d'état comme 200 ou 201? Est-ce que quelqu'un peut m'aider?
ci-dessous est l'Usercontroller P>
@Test public void testSuccessPostUser() throws Exception{ String baseUrl = "http://localhost:8080/users"; List<String> messages = new ArrayList<>(); messages.add("Hi"); User user = new User(); user.setId(1); user.setName("John"); user.setAge(22); user.setMessages(messages); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON); httpHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); HttpEntity<User> httpEntity = new HttpEntity<>(user, httpHeaders); HttpHandler httpHandler = new HttpHandler(); ResponseEntity<User> actual = httpHandler.sendPost(baseUrl, httpHeaders, user, User.class); //verify request succeed assertEquals(HttpStatus.CREATED, actual.getStatusCode()); assertEquals(201, actual.getStatusCodeValue()); assertTrue(responseBody.contains(id); }
3 Réponses :
POST renvoie 200 par défaut.
Si vous voulez le rendre Retour 201 Ajouter ceci: P>
@ResponseStatus(HttpStatus.CREATED) @PostMapping("/users") public User createUser(@RequestBody User user){
Si vous souhaitez renvoyer des codes d'état personnalisés, vous devez retourner Si vous souhaitez connaître les statuts HTTPS corrects pour une méthode postale, je suggère de Lisez ceci: Quel code d'état devrions-nous retourner si le poste réussit mais n'entraîne rien de nouveau? P> P> REPSPSSONSentialité code>:
Tout d'abord, pour tester le contrôleur HTTP, vous pouvez utiliser Exemples Test: P> mockmvc code>.
mockMvc.perform(post("/users")
.contentType(MediaType.APPLICATION_JSON)
.content("{ "id": 1, "Name": "John", "Age": 22 }")
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isCreated())
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
.andExpect(jsonPath("$.id").value($id))
.andExpect(jsonPath("$.value").value("some-value"));
Merci de me corriger si je me trompe, n'utilisons pas MockMVC pour des tests d'intégration?
Oui, c'est correct, mais je suppose que votre cas est un test d'intégration :)
J'écris un test d'unité. Quelle est la bonne façon de l'écrire?
Vous appelez un point de terminal http: // localhost: 8080 / utilisateurs code>, s'il n'est pas stupéfait, votre type de test est d'intégration.
MockMVC CODE> fournit une API élégante et facile à utiliser pour appeler des points d'extrémité Web et inspecter et affirmer sa réponse en même temps. Vous devez ajouter
@ContextConfiguration code> et
@webappconfiguration code> pour tester le contexte de ressort pour les tests.
J'utilise Junit5 pour écrire des cas de test de l'unité. J'utilise @springboottest code> Annotation. Est-ce que j'ai encore besoin
@contextconfiguration code> et
@webappconfiguration code>? En outre, lorsque vous dites préparant le contexte de printemps pour tester ce que signifie exactement?
@SpringbootTest est exécutant le printemps contextuel complet. C'est juste assez pour toi. Maintenant, il suffit d'ajouter @Autowire MockMVC MockMVC CODE> et utilisez-le dans Test :) @webappconfiguration, cela ne fonctionne que la couche Web.
Bien sûr, ajoutera MockMVC et l'utilisera dans le test. Merci pour votre temps et votre aide.