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 DynamicProxy
il 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 @Mock
et @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.
GO TO FULL VERSION