CodeGym /Cours /All lectures for FR purposes /Scénarios populaires pour travailler avec Mockito

Scénarios populaires pour travailler avec Mockito

All lectures for FR purposes
Niveau 1 , Leçon 408
Disponible

6.1 Se moquer de la méthode statique mockStatic()

Et un autre point important est la moquerie et la vérification des méthodes statiques. "Qu'est-ce qui ne va pas avec ça?", demandez-vous. Oui, statique, mais les méthodes sont les mêmes. Et vous aurez tort.

Rappelez-vous où nous avons commencé à apprendre les objets fictifs ? Étant donné que ces objets sont créés artificiellement via le DynamicProxy. Et les méthodes statiques ne sont liées à aucun objet et DynamicProxyil est impossible d'intercepter leurs appels via . C'est tout.

Mais les créateurs de Mockito ont pu esquiver ici aussi - ils ont écrit leur propre chargeur de classe et avec son aide, ils ont pu remplacer les classes à la volée. Un travail important et difficile, mais ils ont quand même réussi à le faire.

Vous devrez ajouter une bibliothèque supplémentaire pour pom.xml:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-inline</artifactId>
    <version>4.2.0</version>
    <scope>test</scope>
</dependency>

Voici comment procéder si vous avez besoin de vous moquer d'une méthode statique.

1 Créez un objet de classe mock spécial :

MockedStatic<ClassName>managerObject = Mockito.mockStatic(ClassName.class);

2 Ajoutez des règles de fonctionnement à cet objet :

A cet objet de la règle, il faut s'attacher par d'autres moyens.

managerObject.when(ClassName::method name).thenReturn(result);

3 Assurez-vous d'envelopper l'utilisation de cet objettry-with-resources afin que l'objet soit immédiatement supprimé et que Mockito puisse effacer les règles qui lui sont associées.

Exemple:

@Test
void givenStaticMethodWithNoArgs () {
    try (MockedStatic< StaticUtils> utilities =  Mockito.mockStatic( StaticUtils.class)) {
        // add rule
         utilities.when(StaticUtils::name).thenReturn("Hello");

        // check if the rule works
        assertEquals("Hello", StaticUtils.name());
    }
}

Pas aussi beau qu'avec les annotations @Mocket @Spy, mais très pratique. Il était très difficile d'écrire des tests alors qu'il était impossible de se moquer d'une méthode statique simple utilisée à l'intérieur des méthodes testées.

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION