[Aller au contenu](#main-content)

PREVIEW

[](/fr "Page d'accueil BearStudio")

[Prestations](/fr/prestations)[Équipe](/fr/equipe)[Blog](/fr/blog)

[Nous contacter](/fr/contact)Français

<!--astro:end-->

[Accueil](/fr)[Prestations](/fr/prestations)[Équipe](/fr/equipe)[Blog](/fr/blog)

<!--astro:end-->

<!-- Mobile Top Actions -->

Français

<!--astro:end-->

[Nous contacter](/fr/contact)

<!-- Content -->

[](/fr)

1. [Accueil](/fr)
2.
3. [Blog](/fr/blog)
4.
5. Brève 9 : @Mock ou @MockBean, quelle différence ?

# Brève 9 : @Mock ou @MockBean, quelle différence ?

Le 15 mars 2021

par Quentin Lerebours

<!-- Background (translate3d is for safari to apply mix-blend-overlay) -->

![](/_astro/breve-9.Rdv_vQMF_1lfSit.webp)

Il y a quelques jours, j’ai onboardé un nouveau développeur sur un projet Spring Boot qui a un coverage de test à 80%. N’ayant pas énormément d’expérience avec les tests d’[intégration](/fr/prestations), j’ai pris le temps de lui expliquer la différence entre l’annotation @Mock de Mockito et @MockBean de [Spring Boot](/fr/blog/articles/versionner-entite-jpa), je vais donc en profiter pour résumer ça dans une brève.

Que ce soit @Mock ou @MockBean, les deux annotations permettent de mocker le comportement de vos services ou composants Spring.

***Note :*** Mocker, c’est *faker* le comportement d’un service afin de borner le scope du test que vous réalisez. Par exemple, si vous testez le OrderService, qui a pour dépendance le PaymentService (qui fait appel à une librairie externe comme Stripe), vous pouvez mocker le comportement du PaymentService pour ne pas avoir à le tester en même temps que le OrderService (et aussi, parce que vous ne pouvez pas vous permettre de requêter votre librairie externe pendant vos tests).

Donc, @Mock et @MockBean permettent de mocker, mais dans deux contextes différents.

Pour faire simple, je vais être réducteur et dire que **@Mock permet de mocker une dépendance dans le cadre d’un test unitaire alors que @MockBean permet de mocker une dépendance dans le cadre d’un test d’intégration.**

## **Mock**

Disons que vous testiez unitairement la méthode *order* de l’OrderService qui permet de passer une commande. Voilà à quoi ressemblerait le setup de votre test :

![](/_astro/code-1-847x1024.Ba4jwZNo_ZDUopw.webp)

Dans un test unitaire, on *instancie* nous même le service qu’on teste, grâce à son constructeur, ce qui nous permet de lui donner ses dépendances qu’on a mocké. C’est le cas simple, et on peut se servir du mock dans le test pour définir le comportement que la méthode doit avoir.

## **MockBean**

Disons maintenant que vous testiez la méthode *order* de l’OrderService dans le cadre d’un test d’intégration, voilà globalement à quoi ressemblerait le setup de votre test :

![](/_astro/code-2-949x1024.Dw071KZS_RfJen.webp)

Ici, on voit bien que ce n’est pas nous qui créons l’instance de notre service (il n’y a pas de new OrderService()). C’est **Spring** qui va chercher à l’instancier lors du lancement de l’application de test. Par conséquent, **comment faire pour dire à Spring que nous souhaitons utiliser un mock**, et non une vraie instance du service ?

Eh bien c’est aussi simple que d’annoter le service par @MockBean, qui est une annotation fournie par [Spring](https://spring.io), et qui va demander à Spring d’instancier l’OrderService en lui donnant notre mock.

Pour tout savoir sur Java, je vous invite à lire notre [toute première brève](/fr/blog/articles/breve-1-rendre-une-methode-atomique-en-java-en-2-minutes).

Publié le 15 mars 2021

par Quentin Lerebours

[](/fr)

1900 Route de Cailly\
76690 Saint-André-sur-Cailly\
Normandie, FRANCE

[Accueil ](/fr)[Prestations ](/fr/prestations)[UX/UI Design ](/fr/prestations/ux-design)[Développement Web ](/fr/prestations/developpement-web)[Développement Mobile ](/fr/prestations/developpement-mobile)[Boost Projet ](/fr/prestations/boost-projet)[Accompagnement CTO ](/fr/prestations/accompagnement-cto)[Intelligence Artificielle ](/fr/prestations/intelligence-artificielle)[Équipe ](/fr/equipe)[Blog ](/fr/blog)[Candidater ](/fr/contact/processus-candidature-bearstudio)[Branding ](/fr/branding)[Mentions légales](/fr/mentions-legales)

Suivez nous sur...

[ Linkedin ](https://www.linkedin.com/company/bearstudio/ "Linkedin")[ X (twitter) ](https://twitter.com/_BearStudio "X (twitter)")[ Facebook ](https://www.facebook.com/allyouneedisbear "Facebook")[ YouTube ](https://www.youtube.com/channel/UC-2hpnhKgU2C_OFucjEN0IA "YouTube")[ Instagram ](https://www.instagram.com/_bearstudio/ "Instagram")[ GitHub ](https://github.com/BearStudio "GitHub")[ Twitch](https://www.twitch.tv/bearstudiolive "Twitch")

Le BearStudio est supporté par la

![Region Normandie](/_astro/logo-region.BxVRy695_Z1lruBA.svg)

Créé en 2016, le BearStudio est un studio d'accompagnement de projets en R\&D : développement sur-mesure Web et mobile, études de faisabilité et audit technologique, rien ne nous effraie !

© Tous droits réservés
