Mockito pour Java : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Qu'est-ce que Mockito et pourquoi en a-t-on besoin ?

\n\n

Mockito est une puissante bibliothèque pour Java, conçue pour créer des objets mock (simulateurs) dans les tests unitaires. Elle permet d'isoler le code testé de ses dépendances, telles que les bases de données, les API externes, les systèmes de fichiers ou d'autres services. Au lieu d'objets réels, qui peuvent être lents, instables ou nécessiter une configuration complexe, vous créez leur imitation avec un comportement prédéfini.

\n\n

L'objectif principal de Mockito est de rendre les tests unitaires rapides, prévisibles et indépendants de l'environnement externe. La bibliothèque est largement utilisée dans l'écosystème Java (Spring, Java EE, Android) et constitue la norme de facto pour le mocking.

\n\n

Fonctionnalités clés :

\n
    \n
  • Création d'objets mock — imitation de toute classe ou interface.
  • \n
  • Définition du comportement — configuration des valeurs de retour, levée d'exceptions.
  • \n
  • Vérification des appels — contrôle que les méthodes ont été appelées avec certains paramètres et le nombre de fois requis.
  • \n
  • Spy (mocking partiel) — possibilité d'utiliser un objet réel tout en redéfinissant certaines méthodes.
  • \n
  • Capture d'arguments (ArgumentCaptor) — extraction des paramètres passés à une méthode mock pour une vérification ultérieure.
  • \n
\n\n

Installation de Mockito

\n\n

Comme Mockito est une bibliothèque Java, elle ne s'installe pas via pip ou npm. Pour l'intégrer à un projet, on utilise les systèmes de build Maven ou Gradle.

\n\n

Maven (pom.xml)

\n
<dependency>\n    <groupId>org.mockito</groupId>\n    <artifactId>mockito-core</artifactId>\n    <version>5.12.0</version>\n    <scope>test</scope>\n</dependency>\n\n<!-- Pour une utilisation avec JUnit 5 -->\n<dependency>\n    <groupId>org.mockito</groupId>\n    <artifactId>mockito-junit-jupiter</artifactId>\n    <version>5.12.0</version>\n    <scope>test</scope>\n</dependency>
\n\n

Gradle (build.gradle)

\n
testImplementation 'org.mockito:mockito-core:5.12.0'\ntestImplementation 'org.mockito:mockito-junit-jupiter:5.12.0'
\n\n

Il est recommandé d'utiliser la dernière version stable, à jour au moment de la rédaction des tests.

\n\n

Démarrage rapide : exemple de code

\n\n

Prenons un exemple simple. Supposons que nous ayons une classe UserService qui dépend de UserRepository. Nous voulons tester UserService sans démarrer de base de données.

\n\n
// Classe du référentiel (dépendance)\npublic interface UserRepository {\n    User findById(Long id);\n    void save(User user);\n}\n\n// Classe du service (testée)\npublic class UserService {\n    private final UserRepository userRepository;\n\n    public UserService(UserRepository userRepository) {\n        this.userRepository = userRepository;\n    }\n\n    public String getUserName(Long id) {\n        User user = userRepository.findById(id);\n        return user != null ? user.getName() : "Unknown";\n    }\n}\n\n// Test utilisant Mockito\nimport org.junit.jupiter.api.Test;\nimport org.junit.jupiter.api.extension.ExtendWith;\nimport org.mockito.Mock;\nimport org.mockito.junit.jupiter.MockitoExtension;\n\nimport static org.mockito.Mockito.*;\nimport static org.junit.jupiter.api.Assertions.*;\n\n@ExtendWith(MockitoExtension.class)\npublic class UserServiceTest {\n\n    @Mock\n    private UserRepository userRepository;\n\n    @Test\n    public void testGetUserName() {\n        // Création d'un objet mock UserRepository (possible via l'annotation @Mock)\n        // UserRepository mockRepo = mock(UserRepository.class);\n\n        // Configuration du comportement : lors de l'appel à findById(1L), retourner un utilisateur\n        User mockUser = new User(1L, "Alice");\n        when(userRepository.findById(1L)).thenReturn(mockUser);\n\n                    

Recommendations