Mock = simulateur
Il faut un remplaant, un simulacre d'objet des classes dont on
dpend : ce sont les mocks
Un "mock" simule une ressource
Par exemple si une classe est lie une BD ou une file JMS ou autre
chose, mais qu'on n'ait pas (encore) ces "ressources" et qu'on veut
quand mme tester cette classe, on va utiliser des mocks qui sont des
objets simulant ces ressources
C'est utile aussi pour viter les erreurs dues au ressources sousjacentes
source :
http://www.developpez.net/forums/d120071/java/edioutils-java/tests-performance/test-junit-mock/
Les mocks sont parfois appels des doublures, des bouchons, des
marionnettes, des fantoches, des stubs, ...
JMF (Tous droits rservs)
Rappel ? : inversion de
dpendance
Dfinition rappel :
On dit qu'une classe A dpend de classe B si dans la dfinition de A
apparat l'identificateur B. On note :
Lorsqu'une classe dpend d'une autre classe, on peut inverser la
dpendance en construisant une interface intermdiaire
Inversion de dpendance : un
exemple
Souvent on commence le dveloppement de sorte que la logique gnrale
de l'application appelle directement les modules de bas niveau :
La solution
La bonne solution est de faire en sorte que les modules de bas niveau doivent se
conformer des interfaces dfinies et utilises par les modules de haut niveau
Principle
http://www.objectmentor.com/resources/articles/di
p.pdf
"Les modules de haut niveau ne doivent pas dpendre de modules
de bas niveau. Tous deux doivent dpendre d'abstractions. Les
abstractions ne doivent pas dpendre de dtails. Les dtails
doivent dpendre d'abstractions"
Inversion de contrle et
injection de dpendance
Plus prcisment l'inversion de dpendance est souvent dcompose
en deux parties :
l'inversion de contrle qui est l'architecture qui montre que le
sens des flches a t invers
l'injection de dpendance qui donne une valeur pour une classe
qui doit implmenter l'interface intermdiaire
Il va falloir avoir des mocks et donc faire de l'injection de
dpendance
10
11
12
Cration de mocks
Si on a :
ou
13
when() et thenReturn()
Les mthodes statiques when() et thenReturn() de la classe
org.mockito.Mockito prcise le comportement du mock (et
crase les comportements par dfaut)
static org.mockito.Mockito.mock;
Exemple : import
import static org.mockito.Mockito.when;
import org.junit.Test;
import dev.MonInterface;
import dev.UneAutreClasse;
public class LeTest {
@Test
public void unTest() {
MonInterface doublure = mock(MonInterface.class);
when(doublure.maMethode()).thenReturn(56);
System.out.println(doublure.maMethode());
UneAutreClasse ref = mock(UneAutreClasse.class);
when(ref.uneAutreMethode()).thenReturn(87);
System.out.println(ref.uneAutreMethode());
}
}
14
15
16
on peut crer un mock qui retourne toujours 8765 quelle que soit
la valeur du paramtre par :
when(doublure.methodeAvecArgInt(anyInt())).thenReturn(8765) ;
System.out.println(doublure.methodeAvecArgInt(54));
System.out.println(doublure.methodeAvecArgInt(9));
17
package test;
import
import
import
import
static org.mockito.Mockito.*;
static org.junit.Assert.*;
java.util.Iterator;
org.junit.Test;
source :
http://gojko.net/2009/10/23/mockito-in-six-easy-examples/
JMF (Tous droits rservs)
18
19
20
21
22
Fin
23