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?
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étodoMockito.mockStatic
en lugar del métodoMockedStatic
utilizado en el código de ejemplo.Aquí hay un ejemplo de cómo se puede hacer esto:
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étodoverifyStatic
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.