TestsUnitaires:EasyMock
Sommaire
But
EasyMock est une API permettant de créer des mock objects pour faire des tests unitaires. Ainsi, il est possible de vérifier le séquencement des appels et les valeurs des données envoyées aux mock objets, mais aussi, de retourner des valeurs précises à l'objet testé.
API et dépendances
Avant d'implémenter des mock objects, il faut récupérer tous les JAR requis pour les référencer dans le classpath du projet:
Avec Maven, on ajoutera la dépendance suivante dans le fichier pom.xml:
<dependency> <groupId>org.easymock</groupId> <artifactId>easymock</artifactId> <version>3.1</version> <scope>test</scope> </dependency>
Creation d'un mock object
La création et la gestion des mock objects se fait à l'aide d'une instance de l'interface org.easymock.IMocksControl obtenue par la classe org.easymock.EasyMock.
IMocksControl mocksControl = EasyMock.createStrictControl(); MyInterface myMockObject = mocksControl.createMock(MyInterface.class);
Création de l'objet à tester
En principe, les mock objects sont injectés dans la classe à tester lors de son instanciation en les passant en paramètres dans le constructeur. Pour faire un authentique test unitaire, il faut que tous les objets, hormis celui à tester, soient mockés.
MyObject myObject = new MyObject(myMockObject);
Enregistrement du scénario attendu
Le principe est d'indiquer à EasyMock, le séquencement des appels aux différents mock objects dans le bon ordre:
myMockObject1.methodA(); myMockObject2.method(); myMockObject1.methodB();
Des opérateurs fournis dans la classe org.easymock.EasyMock, permettent de tester les valeurs des paramètres des méthodes appelées:
myMockObject.methodA(EasyMock.eq(value), EasyMock.eq(10238)); myMockObject.methodB((Integer)EasyMock.notNull());
Pour retourner une donnée:
myMockObject.getData(); EasyMock.expectLastCall().andReturn(null);
Pour simuler la levée d'une exception:
myMockObject.getData(); EasyMock.expectLastCall().andThrow(new RuntimeException());
L'enregistrement du scénario doit se terminer par:
mocksControl.replay();
Après un test, la création d'un nouveau scénario doit être précédée par:
mocksControl.reset();
Vérification
Une fois le test lancé et terminé, la vérification se fait en appelant le méthode verify de l'instance de l'interface org.easymock.IMocksControl:
mocksControl.verify();