CodeGym/Java Course/Modulo 3/Scenari popolari per lavorare con Mockito

Scenari popolari per lavorare con Mockito

Disponibile

6.1 Deridere il metodo statico mockStatic()

E un altro punto importante è la derisione e la verifica dei metodi statici. "Cosa c'è che non va?", chiedi. Sì, statico, ma i metodi sono gli stessi. E sbaglierai.

Ricordi dove abbiamo iniziato a conoscere gli oggetti fittizi? Poiché questi oggetti vengono creati artificialmente tramite DynamicProxy. E i metodi statici non sono vincolati ad alcun oggetto ed DynamicProxyè impossibile intercettare le chiamate ad essi tramite . È tutto.

Ma anche qui i creatori di Mockito sono stati in grado di schivare: hanno scritto il proprio caricatore di classi e con il suo aiuto sono stati in grado di sostituire le classi al volo. Un lavoro grande e difficile, ma sono comunque riusciti a farlo.

Sarà necessario aggiungere una libreria aggiuntiva a pom.xml:

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

Ecco come lavorare se devi prendere in giro un metodo statico.

1 Creare un oggetto di classe mock speciale:

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

2 Aggiungere regole operative a questo oggetto:

A questo oggetto della regola è necessario aggrapparsi in altri modi.

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

3 Assicurati di racchiudere l'uso di questo oggetto intry-with-resources modo che l'oggetto venga immediatamente eliminato e Mockito possa cancellare le regole ad esso associate.

Esempio:

@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());
    }
}

Non bello come con annotazioni @Mocke @Spy, ma molto pratico. Era molto difficile scrivere test quando era impossibile deridere un semplice metodo statico utilizzato all'interno dei metodi sottoposti a test.

Commenti
  • Popolari
  • Nuovi
  • Vecchi
Devi avere effettuato l'accesso per lasciare un commento
Questa pagina non ha ancora commenti