Quelques Live Template IntelliJ pour Mockito

Hello, j’en avais un peu marre d’écrire régulièrement voire répétitivement dans mes tests les constructions mockito.

Pour ça je me suis créé dans mon IDE favori, IntelliJ, ce qu’on appelle des Live Template. Ces templates permettent à partir d’une abréviation d’insérer des fragments de code. Ainsi par exemple :

Taper iter dans votre éditeur puis de faire Ctrl+J (sous OSX) va développer cette abréviation dans le bout de code ci-dessous (suivant le contexte bien entendu)

for (TypeInIterable type : someIterable) {

}

Taper sur Ctrl+J (sous OSX) vous permet de lister les abréviations disponible dans le contexte courant.

Les Live Template pour Mockito

Bien qu’imparafaite pour des raisons de limite technique d’IntelliJ, elles sauvent un minimum de temps, multiplié par le nombre de test. Malheureusement il n’y a pas non plus d’import export uniquement pour les live template, il faut donc se taper la configuration de intellij à la main. Cela dit il est possible de contourner partiellement ce problème avec la sauvegarde de la configuration personnelle sur les serveurs intellij, ou encore d’exporter la configuration pour les live templates, les file templates, et encore autre chose.

J’ai défini toutes ces annotations dans un nouveau groupe test, et j’ai activé pour toutes le contexte Java, avec reformatage et simplification du nom qualifié.


  • Description : Creates a field with the @Mock annotation
  • Abbréviation : am
  • Template text :
@org.mockito.Mock private $TYPE$ $MOCK_FIELD$
  • Les variables du templates sont :
Name Expression Default value Skip if defined
TYPE variableOfType(“Object”)
MOCK_FIELD suggestVariableName()

  • Description : Creates a field with the @Spy annotation
  • Abbréviation : as
  • Template text :
@org.mockito.Spy private $TYPE$ $MOCK_FIELD$
  • Les variables du templates sont :
Name Expression Default value Skip if defined
TYPE variableOfType(“Object”)
MOCK_FIELD suggestVariableName()

  • Description : Creates a field with the @InjectMocks annotation
  • Abbréviation : aim
  • Template text :
@org.mockito.InjectMocks private $TYPE$ $MOCK_FIELD$
  • Les variables du templates sont :
Name Expression Default value Skip if defined
TYPE variableOfType(“Object”)
MOCK_FIELD suggestVariableName()

  • Description : Add @RunWith(MockitoJUnitRunner.class)
  • Abbréviation : rwm
  • Template text :
@org.junit.runner.RunWith(org.mockito.runners.MockitoJUnitRunner.class)

  • Description : BDD Stub mock with given(...).willReturn(...) style
  • Abbréviation : gw
  • Template text :
given($MOCK$).willReturn($ARGS$)$END$
  • Les variables du templates sont :
Name Expression Default value Skip if defined
TYPE variableOfType(“Object”)
ARGS

  • Description : BDD Stub spy/mock with willReturn(...).given(...) style
  • Abbréviation : wg
  • Template text :
org.mockito.BDDMockito.willReturn($RETURNED$).given($MOCK$).$CALL$ $END$
  • Les variables du templates sont :
Name Expression Default value Skip if defined
RETURNED complete()
MOCK variableOfType(“Object”)
CALL complete()

  • Description : Inserts a verify(...) statement
  • Abbréviation : verif
  • Template text :
org.mockito.Mockito.verify($MOCK$).$CALL$
  • Les variables du templates sont :
Name Expression Default value Skip if defined
RETURNED complete()
MOCK variableOfType(“Object”)
CALL complete()

  • Description : Inserts Mockito.inOrder(mocks) followed by inOrder.verify(...) statements
  • Abbréviation : ioverif
  • Template text :
org.mockito.InOrder $inOrderVar$ = org.mockito.Mockito.inOrder($MOCKS$);

$IN_ORDER_VAR$.verify($MOCK$).$CALL$;
  • Les variables du templates sont :
Name Expression Default value Skip if defined
IN_ORDER_VAR suggestVariableName()
MOCKS variableOfType(“Object”)
MOCK variableOfType(“Object”)
CALL complete()

Voilà donc les templates que je me suis créé pour IntelliJ, il manque certainement des cas d’utilisation, mais je trouvais plus judicieux de mettre ces cas là au moins. Pour nos amis Eclipse oou Netbeans, il y a des fonctionnalités comparables plus ou moins évoluées (de mémoire le système d’Eclipse est plutôt pas mal).

Références