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’imparfaite pour des raisons de limite technique d’IntelliJ, elles sauvent un minimum de temps, multiplié par le nombre de tests. Malheureusement, il n’y a pas non plus d’import export uniquement pour les live template, il faut donc se taper la configuration d’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 tout 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).