CodeGym /Cursos /All lectures for ES purposes /Escenarios populares para trabajar con Mockito

Escenarios populares para trabajar con Mockito

All lectures for ES purposes
Nivel 1 , Lección 327
Disponible

6.1 Burlándose del método estático mockStatic()

Y un punto más importante es la burla y verificación de métodos estáticos. “¿Qué hay de malo en eso?”, preguntas. Sí, estático, pero los métodos son los mismos. Y te equivocarás.

¿Recuerdas dónde empezamos a aprender sobre objetos simulados? Dado que estos objetos se crean artificialmente a través de DynamicProxy. Y los métodos estáticos no están vinculados a ningún objeto y DynamicProxyes imposible interceptar llamadas a través de ellos . Eso es todo.

Pero los creadores de Mockito también pudieron esquivar aquí: escribieron su propio cargador de clases y con su ayuda pudieron reemplazar las clases sobre la marcha. Un trabajo grande y difícil, pero aun así lograron hacerlo.

Deberá agregar una biblioteca adicional a pom.xml:

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

Así es como funciona si necesita simular un método estático.

1 Cree un objeto de clase simulada especial:

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

2 Agregue reglas de operación a este objeto:

A este objeto de la regla es necesario aferrarse de otras maneras.

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

3 Asegúrese de incluir el uso de este objetotry-with-resources para que se elimine inmediatamente y Mockito pueda borrar las reglas asociadas con él.

Ejemplo:

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

No tan bonito como con anotaciones @Mocky @Spy, pero muy práctico. Era muy difícil escribir pruebas cuando era imposible simular un método estático simple que se usaba dentro de los métodos bajo prueba.

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