Mockito

Un article de Agora2ia.


Sommaire

Présentation

Mockito est un framework de Mock en Java. C'est en fait un fork de EasyMock, avec certaines évolutions : Mockito vs. EasyMock

Voir Tests Unitaires : Mockito


Hello world

  • Création du mock avec la méthode mock()
import static org.mockito.Mockito.*;

MonInterface mock = mock(MonInterface.class);
  • Définition du comportement du Mock avec la méthode when()
when(doublure.maMethode()).thenReturn(56);
  • On ecrit le test en remplaçant les occurences de la classe mockée par le mock lui même
  • On vérifie les interactions effectuées pendant l'execution du test avec le mock avec la méthode verify()
verify(mock).methodeBool();                // methodeBool() appelee une fois !
verify(mock, times(1)).methodeBool();      // equivalent !
verify(mock, atLeastOnce()).methodeBool(); // au moins une fois !
verify(mock, atMost(1)).methodeBool();     // au plus une fois !
verify(mock, never()).methodeBool();       // jamais (ce qui est faux) !
verify(mock).methodeIntBis(4, 2);          // avec des param�etres !


Compatibilité entre versions

  • Dans la version 1.3 que nous utilisions, le stubbing se faisait via la méthode stub alors qu'il se fait avec la méthode whren dans les versions 1.8 et postérieures.
stub(accountMock.getLabel()).toReturn("COMPTE:"+number);   // AVANT
when(accountMock.getLabel()).thenReturn("COMPTE:"+number); // APRES


Tips

Vérifier qu'il n'y a aucun appel à un mock (aucune interaction)

Prenons l'exemple d'un service ConvertionRate qui offre notamment la méthode getRate(String fromCurrency, String toCurrency). Nous voulons créer, et tester ;o), une classe statique ConvertionHelper qui permet de filtrer les appels au service (par exemple pour des raisons de performance), par exemple quand la devise de départ est la même que celle d'arrivée :

final ConvertionService service = mock(ConvertionService.class);
ConvertionHelper.getRate("sameCurrency", "sameCurrency", service);
verifyZeroInteractions(service);


Ressources