web-dev-qa-db-fra.com

Recherche d'instructions statiques d'importation pour les constructions Mockito

J'essaie de percuter le mur de briques entre moi et Mockito. Je me suis arraché les cheveux pour essayer d’obtenir les informations correctes import statique pour les choses Mockito. Vous penseriez peut-être que quelqu'un lancerait une table en disant que anyInt () vient de org.mockito.Matchers et when () vient de org.mockito.Mockito, etc., mais ce serait trop utile pour les nouveaux arrivants, non?

Ce type de chose, surtout lorsqu'il est mélangé avec une myriade de déclarations d'importation supplémentaires se terminant par des astérisques, n'est pas toujours très utile:

import static org.junit.Assert.*;
import static org.mockito.Mockito.*;

Oui, je connais et ai essayé d'utiliser le mécanisme Fenêtre Eclipse -> Préférences-> Java -> Éditeur-> Assistant de contenu -> Favoris. Cela aide , mais ça ne frappe pas le clou sur la tête.

Toute réponse à cette question serait appréciée.

Merci beaucoup, Russ

67
Russ Bateman

Le problème est que les importations statiques de Hamcrest et Mockito ont des noms similaires, mais renvoient des correspondants et des valeurs réelles, respectivement.

Une solution consiste simplement à copier les classes Hamcrest et/ou Mockito et à supprimer/renommer les fonctions statiques de manière à ce qu'elles soient plus faciles à mémoriser et moins visibles dans l'auto-complétion. C'est ce que j'ai fait.

De plus, lors de l'utilisation de simulacres, j'essaie d'éviter assertThat en faveur d'autres assertions et verify, par ex.

assertEquals(1, 1);
verify(someMock).someMethod(eq(1));

au lieu de

assertThat(1, equalTo(1));
verify(someMock).someMethod(eq(1));

Si vous supprimez les classes de vos favoris dans Eclipse et saisissez le nom long, par exemple. org.hamcrest.Matchers.equalTo et faites CTRL + MAJ + M pour 'Ajouter Importation', la saisie semi-automatique ne vous montrera que les correspondants Hamcrest, pas ceux de Mockito. Et vous pouvez le faire dans l’autre sens, à condition de ne pas mélanger les joueurs.

16
Garrett Hall

Voici ce que j'ai fait pour faire face à la situation.

J'utilise les importations globales sur une nouvelle classe de test.

import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import static org.mockito.Matchers.*;

Lorsque vous avez terminé votre test et que vous devez vous engager, il vous suffit de CTRL + SHIFT + O pour organiser les packages. Par exemple, vous pouvez simplement vous retrouver avec:

import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.Matchers.anyString;

Cela vous permet de coder sans vous coincer pour essayer de trouver le bon paquet à importer.

95
Tony R

Pour is ()

import static org.hamcrest.CoreMatchers.*;

Pour assertThat ()

import static org.junit.Assert.*;

Pour quand () et verify ()

import static org.mockito.Mockito.*;
1
ethemsulan