Publié le 10 Septembre 2013

Je ne suis pas vraiment fan des mocks mais il faut avouer que quand on travaille sur du code legacy ça rend bien service.

Voici donc comment créer et utiliser un mock avec Mockito depuis un test unitaire JUnit.

Il faut tout d'abord ajouter le jar Mockito à votre projet. Si vous utilisez Maven voilà ce que ça donne (attention à bien utiliser le scope test pour éviter que le jar se retrouve en prod):

<dependency>
 <groupId>org.mockito</groupId>
 <artifactId>mockito-core</artifactId>
 <version>1.9.5</version>
 <scope>test</scope>
</dependency>

Ensuite dans votre classe test il faut importer les classes suivantes:

import static org.mockito.Matchers.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

Les imports static permettent d'utiliser directement les méthodes mock, when, ... je trouve que c'est plus lisible.

Ensuite pour créer un mock:

ComplicatedObject legacy = mock(ComplicatedObject.class);

Techniquement on a un mock mais c'est assez limité car toutes les methodes retournent null. Pas pratique pour tester. Il faut donc spécifier le comportement du mock:

when(legacy.complexMethod()).thenReturn("success");

Voilà le mock est prêt à être utilisé. Quand legacy.complexMethod() sera appelé, on récupérera la String "success".

Si la méthode à mocker à des paramètres on peut utiliser tout l'arsenal des Matchers: eq, any, ...

when(legacy.complexMethodWithParam(eq(1))).thenReturn("success");
when(legacy.complexMethodWithParam(eq(0))).thenReturn("failure");

when(legacy.complexMethodWithParam(anyString())).thenReturn("unknown");

Voir les commentaires

Rédigé par Bliz

Publié dans #Java

Repost 0