Classes et méthodes finales fictives avec Mockito

Classes et méthodes finales simulées avec Mockito

1. Vue d'ensemble

Dans ce court article, nous allons nous concentrer sur la façon de simuler des classes et des méthodes finales - à l'aide de Mockito.

Comme pour d'autres articles axés sur le framework Mockito (commeMockito Verify,Mockito When/Then etMockito’s Mock Methods), nous utiliserons la classeMyList présentée ci-dessous comme collaborateur dans les cas de test.

Nous allons ajouter une nouvelle méthode pour ce tutoriel:

public class MyList extends AbstractList {
    final public int finalMethod() {
        return 0;
    }
}

Et nous allons également l'étendre avec une sous-classefinal:

public final class FinalList extends MyList {

    @Override
    public int size() {
        return 1;
    }
}

2. Configurer Mockito pour les méthodes et classes finales

Avant que Mockito puisse être utilisé pour se moquer des dernières classes et méthodes, il doit être configuré.

Nous devons ajouter un fichier texte au répertoiresrc/test/resources/mockito-extensions du projet nomméorg.mockito.plugins.MockMaker et ajouter une seule ligne de texte:

mock-maker-inline

Mockito vérifie le répertoireextensions pour les fichiers de configuration lors de son chargement. Ce fichier permet de se moquer des méthodes et des classes finales.

3. Simulez une méthode finale

Once Mockito is properly configured, a final method can be mocked like any other:

@Test
public void whenMockFinalMethodMockWorks() {

    MyList myList = new MyList();

    MyList mock = mock(MyList.class);
    when(mock.finalMethod()).thenReturn(1);

    assertNotEquals(mock.finalMethod(), myList.finalMethod());
}

En créant une instance concrète et une instance fictive deMyList, nous pouvons comparer les valeurs renvoyées par les deux versions definalMethod() et vérifier que la maquette est appelée.

4. Simulez une classe finale

Se moquer d'une classe finale est aussi simple que de se moquer de n'importe quelle autre classe:

@Test
public void whenMockFinalClassMockWorks() {

    FinalList finalList = new FinalList();

    FinalList mock = mock(FinalList.class);
    when(mock.size()).thenReturn(2);

    assertNotEquals(mock.size(), finalList.size());
}

Comme pour le test ci-dessus, nous créons une instance concrète et une instance fictive de notre classe finale, simulons une méthode et vérifions que l'instance simulée se comporte différemment.

5. Conclusion

Dans ce rapide tutoriel, nous avons expliqué comment simuler des classes et des méthodes finales avec Mockito à l'aide d'une extension Mockito.

Les exemples complets, comme toujours, peuvent être trouvésover on GitHub.