es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Hacer que los métodos estáticos burlados estén disponibles para todos los hilos (o al menos sub-hilos)

Tengo el siguiente código que quiero probar usando Junit5

public void myMethod() {
   final ExecutorService executor = ThreadsUtils.newFixedThreadPool();
   executor.submit(() -> {
      ClassWithStaticMethod.staticMethod();
   })
}

Escribí el siguiente caso de prueba

try (MockedStatic<classwithstaticmethod> mockedStatic = mockStatic(ClassWithStaticMethod.class)) {
            ...
            someObject.myMethod(COUNTRY_CODE);
            ...
}

La simulación mencionada anteriormente no funciona según la documentación de mockStatic. El ámbito del método estático simulado es solo el hilo actual. Sin embargo, ¿cómo podemos simular un método estático para un escenario de múltiples hilos?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para simular un método estático en un escenario multi-hilo, podemos utilizar el framework Mockito para crear un objeto de simulación estático global. Esto se puede hacer utilizando el método mockStatic con el método Mockito.mockStatic en lugar del método MockedStatic utilizado en el código de ejemplo.

    Aquí hay un ejemplo de cómo se puede hacer esto:

    import static org.mockito.Mockito.*;
    
    public class ExampleTest {
    
       @Test
       public void myMethodTest() {
    
          mockStatic(ClassWithStaticMethod.class); // crear un objeto de simulación estático global
    
          final ExecutorService executor = ThreadsUtils.newFixedThreadPool();
          executor.submit(() -> {
             someObject.myMethod(COUNTRY_CODE);
          });
    
          verifyStatic(ClassWithStaticMethod.class, times(1));
          ClassWithStaticMethod.staticMethod();
    
          // restablecer la simulación después de la prueba
          reset(ClassWithStaticMethod.class);
       }
    }
    

    En el código anterior, creamos un objeto de simulación estático global utilizando el método mockStatic de Mockito. Luego, enviamos la tarea al grupo de hilos, que llama al método estático que queremos simular. Verificamos que el método estático sea llamado una vez utilizando el método verifyStatic de Mockito.

    Después de la prueba, restablecemos el objeto de simulación a su estado inicial utilizando el método reset de Mockito. Esto es importante para asegurarse de que las pruebas futuras que utilicen la misma clase no se vean afectadas por la prueba anterior.

    En resumen, al crear un objeto de simulación estático global utilizando Mockito, podemos simular métodos estáticos en un escenario multi-hilo.

Comments are closed.