Framework Mokito

Septembre 2016

Mokito est un Framework de test des applications JAVA. Il permet de simuler des comportements complexes des objets, il facilite le développement des tests unitaires et la détection des erreurs .

Mockito est OpenSource et il est disponible sur l’adresse suivante : http://mockito.org/.


Mockito se base sur le principe d'un objet mock qui simule le comportement d'un autre objet .

L’implémentation des tests Mockito se fait en plusieurs étapes :
  • Création du l’objet mock.
  • Description du comportement attendu.
  • Utilisation des mocks.
  • Vérification que l’interaction avec les mocks est correcte.



Exemple :
public class ClasseA {
public ClasseA()
{
}
public void fonc1()
{
}
public void fonc2()
{
}
public int fonc3(int a, int b)
{
return a+b;
}
}


public class ClasseB {

ClasseA ca ;
public ClasseA getCa() 
{
return ca;
}

public void setCa(ClasseA ca) 
{
this.ca = ca;
}

public ClasseB()
{
ca =new ClasseA();
}

public void met1()
{
ca.fonc1();
ca.fonc1();
System.out.println(ca.fonc3(5, 6));
}
public void met2()
{
ca.fonc2();
}

}

  • Test unitaire de la classe ClasseB :

import static org.mockito.Mockito.mock;
import org.mockito.Mockito;

public class Test 
{

public static void main(String[] args) 
{
ClasseA ca = mock(ClasseA.class);
ClasseB cb =new ClasseB();
cb.setCa(ca);
cb.met1();
Mockito.verify(ca, Mockito.times(2)).fonc1();
Mockito.verify(ca, Mockito.times(1)).fonc3( Mockito.anyInt(), Mockito.anyInt());
}

}
  • Analyse du code :

ClasseA ca = mock(ClasseA.class);
=> On crée un objet ca, un mock de la classe ClasseA.

cb.setCa(ca);
=> On affecte l'objet ca à l'objet cb.

cb.met1();
=>On appelle l'objet cb avec la méthode met1().

Mockito.verify(ca, Mockito.times(2)).fonc1();
=> On vérifie que la méthode fonc1 du mock ca est appelé deux fois.

Mockito.verify(ca, Mockito.times(1)).fonc3( Mockito.anyInt(), Mockito.anyInt());
=> On vérifie que la méthode fonc3 du mock ca est appelé une seul fois par deux paramètres entier quelconque .

Lorsque la vérification échoue une exception est générée.

Exemple:

Mockito.verify(ca, Mockito.atLeast(1)).fonc2();
=> Cette ligne générer l'exception suivante:
Exception in thread "main" Wanted but not invoked:
classeA.fonc2();
-> at Test01.main(Test01.java:16)


==> Elle indique que la méthode fonc2() du mock ca n'est pas appelé .




On peut aussi modifier la résultat de retour d'une fonction .
System.out.println(" La résultat de ca.fonc(3,3) est "+ca.fonc3(3, 3));
Mockito.when(ca.fonc3( Mockito.anyInt(), Mockito.anyInt())).thenReturn(Integer.valueOf(5));
System.out.println(" La résultat de ca.fonc(3,3) est "+ca.fonc3(3, 3));


Analyse du code:
Mockito.when(ca.fonc3( Mockito.anyInt(), Mockito.anyInt())). thenReturn(Integer.valueOf(5));


=> La valeur de retour de la fonction fonc3 du mock ca était 0.
On la force à 5.

Cette fonctionnalité est surtout utile lorsqu’on a une fonction qui contient plusieurs traitements (des conditions, des boucles whiles,…)et on veut vérifier le comportement de toute la fonction. On a besoin donc de configurer les mocks utilisés dans cette fonction pour qu'elle passe tous ces traitements et conditions.

A voir également :

Ce document intitulé «  Framework Mokito  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.