Partage
  • Partager sur Facebook
  • Partager sur Twitter

Cour Testez votre code Java, utilité des mocks

A quoi servent les mocks exactements

9 septembre 2021 à 11:23:08

Bonjour,

je suis le cour sur les test en Java, et j'ai un peu du mal a saisir l’intérêt des mocks. Plus particulièrement le chapitre Simulez des composants externes aux tests avec Mockito.

Les tests sont censés tester nos implémentations, alors quelle est l'intérêt d'utiliser des mocks qui fournissent le résultat que l'on veut en fonction des arguments que l'on a choisis ?

Je comprend que l’intérêt est de coder les tests à l'avance et de pouvoir modifier les classes testées avec de interfaces non implémentées tout en faisant passer les tests, mais dans ce cas pourquoi ne pas directement coder l’implémentation, par exemple pour l'interface SolutionFormatter.

A moins que l’intérêt du test ne soit que de tester la classe CalculationService en lui fournissant des dépendances à la volée, sa responsabilité étant de déléguer le calcul à la bonne méthode du calculator en fonction du calculationModel.

En vérité ici moker calculator n'a pour moi aucun intérêt, même si j'imagine que c’est pour l'exemple, cela à un intérêt clair pour SolutionFormatter qui n'est pas implémenté ou encore si on à besoin d'une implémentation différente à l’exécution. Le mock calculator est redondant à son implémentation dans l'exemple.

-
Edité par monsiob 9 septembre 2021 à 11:46:40

  • Partager sur Facebook
  • Partager sur Twitter
9 septembre 2021 à 12:59:13

Un mock a pour utilité de rendre possible des tests qui se bases sur des composants difficile à intégrer, typiquement car:

- le composant n'est pas disponible sur la plateforme de test.

- la plateforme de test n'a pas la même configuration que la plateforme cible.

- le composant n'a pas un resultat prédictible ou deterministe.

- le composant est trop lourd/compliqué à créer.

- le composant est asynchrone.

- On a pas le contrôle nécessaire sur le composant pour reproduire le comportement nécessaire pour le test.

- etc

Mais également de permettre de simuler différents scénarii: gérer la vitesse de réponse, forcer une exception,...

Tu peux donc mocker par exemple l'implémentation d'accès a une DB pour ne pas avoir a la déployer et la préremplir juste pour des test.

  • Partager sur Facebook
  • Partager sur Twitter
9 septembre 2021 à 17:25:40

merci pour votre réponse
  • Partager sur Facebook
  • Partager sur Twitter
21 septembre 2021 à 19:14:55

La principale idée derrière un mock reste le fait de cibler le test

En mockant tous les paramètres extérieurs tu focalises ton test uniquement sur ce que tu souhaites tester. 

  • Partager sur Facebook
  • Partager sur Twitter