J'essaie de faire un test pour un contrôleur de printemps em> avec Mockito fort> mais cela ne fonctionne pas. Ceci est mon contrôleur: P> when(candidateService.findById(candidate.getId())).thenReturn(null);
doNothing().when(candidateService).deleteById(candidate.getId());
mockMvc.perform(...
3 Réponses :
Responciity.nocontent () renvoie 204 Code, donc si vous souhaitez que votre contrôleur renvoie 404, vous devez modifier votre classe de contrôleur pour revenir à la réponse. Notfounound () P>
Je vais essayer de vous donner quelques directives qui pourraient vous aider:
Supprimez cette liste statique et définition du candidat à partir du fichier de classe de test de l'unité. Cela crée une confusion car les tests doivent être isolés les uns des autres et que vous avez un objet candidat partagé entre tous les tests. Corrigez simplement cela en créant une méthode Static GetatestCandidate () dans votre classe de test qui vous donne un nouveau candidat () à chaque fois. (Consultez les MEMBRES STATIC VS STATIC MÉTHODES EN JAVA) Si vous voyez plus loin que vous disposez d'autres classes de test qui nécessitent un candidat, déplacez cette méthode dans une classe UTIL distincte et appelez-la de différents tests ou même mieux créer une classe de constructeurs pour votre candidat. (Check Builder Design Motif). P> LI>
Avec le cadre de test de Spring MVC, vous avez la possibilité de vérifier l'infrastructure complète des points d'extrémité, y compris les codes d'état HTTP, la sérialisation de l'entrée et de la sortie, le corps de réponse, les redirections, etc. Ne pas vous écarter de cela en testant des choses non pertinentes: @Test
public void shouldReturnNotFoundWhenGetCandidateByNonExistingId() {
//the Arrange part in your test
doThrow(new ResourceNotFoundException(candidate.getId())).when(candidateService).deleteById(anyInt());
//call mockMvc
//assert not found using the MockMvcResultMatchers
}
Merci pour vos réponses :)
Maintenant, j'ai changé mon contrôleur pour: mon test de suppression fonctionnant bien: p> mais devrait devoirReuturner404Landeletecandidateton Renvoyer aucun contenu et je m'attendais à 404 .. p> @Test
Public Void DoppeTreunnocontentWhendeletecandidatedontexist () lance Exception { P>
Candidate candidate = getATestCandidate();
doNothing().when(candidateService).deleteById(anyInt());
mockMvc.perform(
delete("/candidates/{id}", candidate.getId())
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isNoContent());
}
Merci ! @Oanm j'ai édité ma dernière réponse à, tout va bien s'attendre à un petit problème :)
S'il vous plaît vérifier mon édition pour le test DELETE. Vous devez instruire le candidat à propos de lancer la ressourceNotFoundException lorsque vous souhaitez renvoyer le 404 de votre contrôleur.
Oui monsieur j'ai ajouté, essayez {candidateservice.deletebyId (id)} catch (Resourcénotfoundexception e) {.. à mon contrôleur mais je ne sais pas comment vérifier en test car c'est un vide que je fais: Donothing (). Quand (candidats). Quand (candidats). DeletebyID (Anyint ()); Est-ce correct ?
Veuillez lire la fin de mon message parce que je l'ai édité après avoir vu quel est votre problème. quand (candidatservice.deletebyid (Anyintint ()))) Voici comment vous configurez le service pour lancer une exception, puis vous recherchez le non trouvé ..
Je ne sais pas que j'essaie quand thehenthow, mais ça marche au dos, je l'ai fait comme ça, je l'ai fait comme suit ce Dothow (nouvelle ressource de ressourcement (candidat.getide ())). Quand (service candidat) .DeletebyID (Anyintint ()); et son bon travail merci pour votre temps et merci beaucoup à nouveau
Au moins, vous avez eu l'idée que je n'écrivais pas cela dans un éditeur qui est capable de me dire si cela compile ou non, je me trompe peut-être avec la syntaxe, mais vous avez eu l'idée. Et si ma réponse a été utile pour vous, je modifierai à nouveau ma réponse pour corriger la syntaxe et si cela vous a été utile, veuillez la marquer en conséquence :)