Qu'est-ce que Mockito et pourquoi en a-t-on besoin ?
\n\nMockito 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\nL'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\nFonctionnalité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
Installation de Mockito
\n\nComme 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\nMaven (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\nGradle (build.gradle)
\ntestImplementation 'org.mockito:mockito-core:5.12.0'\ntestImplementation 'org.mockito:mockito-junit-jupiter:5.12.0'\n\nIl est recommandé d'utiliser la dernière version stable, à jour au moment de la rédaction des tests.
\n\nDémarrage rapide : exemple de code
\n\nPrenons 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.
// 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 Aussi dans la bibliothèque
Migrations de bases de données en Java : aperçu des outils populaires
Files d'attente de tâches dans Node.js : Bull, Bee-Queue, Kue et implémentation sur Redis
fx pour Go : guide complet avec exemples