.. Introduction à Mockito slides file, created by hieroglyph-quickstart . Modifié le 28 janvier 2015 par acordier :tocdepth: 3 ======================= Introduction à Mockito ======================= .. _Amélie Cordier: http://liris.cnrs.fr/amelie.cordier .. raw:: html
Département Informatique, IUT Lyon 1

Creative Commons License

Ce travail est sous licence Creative Commons Attribution-ShareAlike 3.0 France.

.. role:: eng .. role:: del ====================== Introduction à Mockito ====================== Contexte ======== Liens utiles ++++++++++++ http://mockito.org/ http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html http://gojko.net/2009/10/23/mockito-in-six-easy-examples/ Contexte - Problème +++++++++++++++++++ Lorsque l'on écrit des tests, il nous manque parfois des éléments : * Objets inaccessibles * Situations difficiles à simuler * ... Par ailleurs, quand on fait du test unitaire, on veut éviter au maximum les effets de bords (dysfonctionnements des autres objets) Principe de Mockito : simuler les objets "manquants" ! Que fait Mockito ? ++++++++++++++++++ Mockito crée des simulacres à partir de n'importe quelle classe ou interface. Mockito permet de controler le comportement des méthodes, c'est le *stubbing* Dans quelles situations l'utiliser ? ++++++++++++++++++++++++++++++++++++ * Pour des objets au comportement "non-déterministe" (horloge, capteur) * Pour simuler des sources externes (BD, serveurs) * Pour simuler des objets pas encore implémentés * Pour créer des situations difficiles à reproduire (erreurs, exceptions) * Pour espionner les appels à des objets bien réels Quelles sont les fonctionnalités de Mockito ? +++++++++++++++++++++++++++++++++++++++++++++ **Simuler** : * Accepter un argument * Accepter un ensemble d'arguments * Lever une exception **Vérifier, espionner** : * Vérifier le nombre d'appels d'une méthode (``atLeast``, ``atMost``) * Vérifier l'ordre dans lequel ont été faits les appels Vocabulaire +++++++++++ * *dummy* : objet vide... jamais utilisé et dont les méthodes ne sont jamais appelées (remplissage) * *fake* : objet avec une implémentation valide mais simplifiée (image d'une BD par exemple) * *stub* : implémentation partielle pour les besoins du test (retourne des valeurs lors de l'invocation d'une méthode) * *spy* : classe qui vérifie l'utilisation qui en est faite à la fin de l'exécution * *mock* : *dummy implementation*... dont on peut maîtriser le comportement Utilisation de Mockito ====================== Création des mocks ++++++++++++++++++ La création des Mocks se fait soit en utilisant la méthode static ``mock()``, soit en utilisant l'annotation ``@Mock`` Dans le cas de l'annotation les objets doivent être initialisés avec ``MockitoAnnotations.initMocks(this)`` .. code-block:: text import static org.mockito.Mockito.*; List mockedList = mock(List.class); Gestion du comportement - Stubbing ++++++++++++++++++++++++++++++++++ Méthode ``when`` Spécifier une condition et retourner la valeur pour cette condition * Retour de valeur unique * Retour de valeurs consécutives * Levée d'exceptions .. code-block:: text when(mockedList.get(0)).thenReturn("toto"); when(mockedList.get(anyInt())).thenReturn("toto"); Vérifications en fin de test ++++++++++++++++++++++++++++ Méthode ``verify`` * Un seul appel * Au moins / au plus une fois * Jamais appelée * Appelée avec des paramètres spécifiques Mockito conserve une trace des appels aux méthodes des Mocks. .. warning:: C'est du test de comportement : on s'assure que la méthode est appelée avec les bons paramètres, et non que le résultat est bon. Espionnage ++++++++++ Méthode ``spy`` Cette méthode permet d'encapsuler un objet qui existe vraiment. Matchers ++++++++ Pour utiliser un ensemble de paramètres Si on utilise des matchers, tous les arguments de la méthode doivent être des matchers ! .. code-block:: text when(mockedList.get(anyInt())).thenReturn("element");`` Pour aller plus loin ==================== Limitations de Mockito ++++++++++++++++++++++ Mockito ne gère pas : * Les classes finales * Les méthodes statiques * Les classes anonymes * Les types primitifs * Les méthodes equals() et hashCode() Alternatives à Mockito ++++++++++++++++++++++ * jMock http://jmock.org/ * EasyMock http://easymock.org/ Exercice : simulation de traitements sur une BD =============================================== .. rst-class:: exercice Exercice ++++++++ L'objectif de l'exercice est de mettre en application les différentes fonctionnalités de Mockito pour simuler le comportement d'un connecteur de bases de donnée. On considérera que la base contient des clients et des factures. La correction de l'exercice se fera de façon interactive et collective, au tableau (projection).