Comment réaliser un test unitaire avec Mockito
Nous allons voir dans cet article comment utiliser le framework open source Mockito pour effectuer un test unitaire.
1. Introduction
Après avoir rédigé notre code, nous avons besoin de nous assurer qu'il fonctionne correctement. Pour cela, nous avons besoin de faire des tests.
Les tests unitaires sont destinés à tester une unité du logiciel. Afin d’être vraiment unitaires, ils doivent être en totale isolation pour ne tester qu’une classe et qu’une méthode à la fois.
Nous allons voir dans cet article comment utiliser le framework open source Mockito pour réaliser nos tests unitaires.
2. C'est quoi Mockito ?
Mockito est un framework Java de test open source permettant de générer automatiquement des objets ‘mockés‘. C'est à dire simuler des interfaces afin qu'une fonctionnalité fictive puisse remplacer une fonctionnalité ou dépendance réelle que l'on ne souhaite pas utiliser dans un test unitaire. Couplé avec JUnit, il permet de tester le comportement des objets réels associés à un ou des objets ‘mockés’ facilitant ainsi l’écriture des tests unitaires.
3. Cas pratique test unitaire avec Mockito
Dans notre cas pratique, nous allons réaliser un test sur le endpoint de notre controller qui permet de créer un nouvel utilisateur.
Après avoir rédigé nos différents codes, les étapes pour réaliser notre test sont les suivantes :
a. Ajouter la dépendance "Junit" dans votre fichier pom.xml

b. S'il n'en existe pas encore, créer une classe de test (__Test.java) dans le dossier test du répertoire

c. Ajouter les annotations suivantes à la classe de test :
@WebMvcTest(controllers = UserController.class) : Pour définir le controller visé par notre test
@AutoConfigureMockMvc(addFilters = false) : Pour mettre en place la fonctionnalité MockMvc et pour désactiver les éventuelles sécurités
@ExtendWith(MockitoExtension.class) : Pour initialiser les simulations Mock

d. Création des objets mockés et de la variable UserRepository

e. Création de la fonction saveUserTest(). Avec l'annotation "@Test" pour spécifier que c'est un test et que la fonction soit exécuté comme tel

f. Création de la variable test User, qui représente notre nouvel l'utilisateur

g. Définition du comportement de la fonction de test
given(userRepository.save(ArgumentMatchers.any())) : Le scénario initial;
ici, c'est l'appel de la fonction ".save(argument)" sur une variable de type UserRepository
willAnswer(invocationOnMock -> invocationOnMock.getArgument(0)) : La réponse à retourner;
ici, le comportement mocké de notre dépendance

h. Définition du résultat de la fonction de test
mockMvc.perform(post("/user") : Appel du endpoint à travers l'environnement servlet mocké (mockMvc)
contentType(MediaType.APPLICATION_JSON) : Ajouter le type de contenu de la requête
content(objectMapper.writeValueAsString(user))) : Ajouter du contenu de la requête; qui est notre utilisateur créé plus haut

i. Nous pouvons à présent exécuter notre test

Nous constatons que comme prévu dans notre controller, nous avons comme retour un statut "201" pour dire que l'utilisateur a bien été enregistré.
Et si nous relançons le test sans changer les valeurs,

Nous constatons que comme prévu dans notre controller, nous avons comme retour un statut "Credentials alrady exit" pour dire que l'utilisateur existe déjà.
VOILÀ, COMMENT UTILISER MOCKITO POUR EFFECTUER UN TEST UNITAIRE.
Pour un suivi plus détaillé, bien vouloir regarder la vidéo démonstrative suivante:
Merci de nous avoir suivies !!!


f. Création de la variable test User, qui représente notre nouvel l'utilisateur

g. Définition du comportement de la fonction de test
given(userRepository.save(ArgumentMatchers.any())) : Le scénario initial;
ici, c'est l'appel de la fonction ".save(argument)" sur une variable de type UserRepository
willAnswer(invocationOnMock -> invocationOnMock.getArgument(0)) : La réponse à retourner;
ici, le comportement mocké de notre dépendance

h. Définition du résultat de la fonction de test
mockMvc.perform(post("/user") : Appel du endpoint à travers l'environnement servlet mocké (mockMvc)
contentType(MediaType.APPLICATION_JSON) : Ajouter le type de contenu de la requête
content(objectMapper.writeValueAsString(user))) : Ajouter du contenu de la requête; qui est notre utilisateur créé plus haut

i. Nous pouvons à présent exécuter notre test

Nous constatons que comme prévu dans notre controller, nous avons comme retour un statut "201" pour dire que l'utilisateur a bien été enregistré.
Et si nous relançons le test sans changer les valeurs,

Nous constatons que comme prévu dans notre controller, nous avons comme retour un statut "Credentials alrady exit" pour dire que l'utilisateur existe déjà.
VOILÀ, COMMENT UTILISER MOCKITO POUR EFFECTUER UN TEST UNITAIRE.
Pour un suivi plus détaillé, bien vouloir regarder la vidéo démonstrative suivante:
Merci de nous avoir suivies !!!

given(userRepository.save(ArgumentMatchers.any())) : Le scénario initial;
ici, c'est l'appel de la fonction ".save(argument)" sur une variable de type UserRepository
willAnswer(invocationOnMock -> invocationOnMock.getArgument(0)) : La réponse à retourner;
ici, le comportement mocké de notre dépendance

h. Définition du résultat de la fonction de test
mockMvc.perform(post("/user") : Appel du endpoint à travers l'environnement servlet mocké (mockMvc)
contentType(MediaType.APPLICATION_JSON) : Ajouter le type de contenu de la requête
content(objectMapper.writeValueAsString(user))) : Ajouter du contenu de la requête; qui est notre utilisateur créé plus haut

i. Nous pouvons à présent exécuter notre test

Nous constatons que comme prévu dans notre controller, nous avons comme retour un statut "201" pour dire que l'utilisateur a bien été enregistré.
Et si nous relançons le test sans changer les valeurs,

Nous constatons que comme prévu dans notre controller, nous avons comme retour un statut "Credentials alrady exit" pour dire que l'utilisateur existe déjà.
VOILÀ, COMMENT UTILISER MOCKITO POUR EFFECTUER UN TEST UNITAIRE.
Pour un suivi plus détaillé, bien vouloir regarder la vidéo démonstrative suivante:
Merci de nous avoir suivies !!!
mockMvc.perform(post("/user") : Appel du endpoint à travers l'environnement servlet mocké (mockMvc)
contentType(MediaType.APPLICATION_JSON) : Ajouter le type de contenu de la requête
content(objectMapper.writeValueAsString(user))) : Ajouter du contenu de la requête; qui est notre utilisateur créé plus haut

i. Nous pouvons à présent exécuter notre test

Nous constatons que comme prévu dans notre controller, nous avons comme retour un statut "201" pour dire que l'utilisateur a bien été enregistré.
Et si nous relançons le test sans changer les valeurs,

Nous constatons que comme prévu dans notre controller, nous avons comme retour un statut "Credentials alrady exit" pour dire que l'utilisateur existe déjà.


VOILÀ, COMMENT UTILISER MOCKITO POUR EFFECTUER UN TEST UNITAIRE.
Merci de nous avoir suivies !!!
No comments yet. Start a new discussion.