Willing BONOU-SELEGBE

Software Engineer

Willing BONOU-SELEGBE

Software Engineer

Download my resume

Spring-Boot: Ecrire des tests unitaires & d’integration

willing - 19/03/2020

Tests Unitaires

Configuration des tests unitaires

Conformément à la convention maven, nos tests unitaires seront situés dans le répertoire src/test/java.

Pour lancer les TUs, nous utiliserons le plugin maven-surefire avec la commande: mvn test.


Tests unitaires d’un Controler avec Spring Boot

Le code du controler EmployeeController.java est le suivant:

Pour tester ce Controler, nous utiliserons l’annotation @WebMvcTest de Spring. Cette annotation permet de lancer une web application context spring contenant uniquement les beans dont nous avons besoin. Ainsi, seule la couche Controler de Spring sera initialisée; Spring ne chargera que les Beans annotés avec @Controller. Dans notre cas, nous spécifions à Spring de ne charger que le controller EmployeeController.

  • L’annotation WebMvcTest configure de façon automatique un Bean de type MockMvc et l’ajoute dans le context d’application. Ce qui nous permet d’injecter ce Bean à la ligne 8 ci-dessus.
  • L’annotation @MockBean du framework Mockito nous permet quant à lui de mocker le service EmployeeService et d’isoler ainsi notre Controler du reste des couches de l’application.
  • Notons enfin la présence de l’annotation @RunWith qui nous permet d’utiliser des annotions du Spring Test Framework dans un test Junit.

Pour tester par exemple la méthode getEmployee(String id) de notre controler, nous écrirons le code suivant

Ce test suit le pattern given-when-then :

  • D’abord nous mockons la methode findEmployeeById(Long employeeId) du service EmployeeService gâce à Mockito.
  • Ensuite nous utilisons MockMvc pour tester la réponse de notre controler. MockMvc (de SpringMVCTestFramework) permet de simuler des requêtes HTTP entrantes, de valider les paramètres d’entrés, et de vérifier la réponse d’un Controler.
  • Enfin nous vérfions que le contenu et le statut de la réponse du Controler est bien conforme à l’attendu.

Le code complet du Test de notre Controler est le suivant :

Remarque:
Je vois arriver les puristes qui diront que ceci n’est pas un vrai test unitaire, vu que nous interagissons avec le framework Spring.
En effet, un test unitaire devrait dans l’absolu se passer de tout interraction avec les autres couches de l’application, y compris le framework.
Mais en l’occurence le TU de notre controler ne servirait à rien si nous faisons abstraction du framework Spring. Les annotations du controler telles que @RequestMapping, @GetMapping, @ResponseStatus etc… ne peuvent pas être tester sans utiliser le framework Spring. Nous devons donc mocker le framework spring, et c’est exactement ce que fait MockMVC et Spring Test Framework .

Dans la page suivante de notre article, nous verrons comment tester unitairement un Service avec Spring Boot.

Pages : 1 2 3 4 5 6 7

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Étiquettes : , , ,

Whatever the mind of man can conceive and believe, it can achieve

Napoleon Hill