Hola,
Si al mockear una clase estática con Java, les sale el siguiente error:
org.mockito.exceptions.base.MockitoException: For com.bolivar.proteccion.creditos.common.util.UtilitiesExecuteRule, static mocking is already registered in the current thread To create a new mock, the existing static mock registration must be deregistered
La clase estática esta definida así:
public static class UtilitiesExecuteRule;
La mockean de la siguiente manera:
private MockedStatic<UtilitiesExecuteRule> utilitiesExecuteRule;
Y crean un metodo @BeforeEach:
@BeforeEach
void setUp() {
utilitiesExecuteRule = mockStatic(UtilitiesExecuteRule.class);
}
Esto se debe a que ya se ha registrado un mock estático para la clase UtilitiesExecuteRule.java en el hilo de ejecución actual y estás intentando registrar otro. Esto puede suceder si estás utilizando @Mock o mockStatic() en diferentes partes de tu código y estas partes están siendo ejecutadas en el mismo hilo.
Para solucionar este problema, necesitan asegurarse de que solo se registre un mock estático para la clase UtilitiesExecuteRule.java
Esto se hace de la siguiente forma:
1. Dentro de la clase Test, se define la variable de la clase estática así:
private MockedStatic<UtilitiesExecuteRule> utilitiesExecuteRule;
2. Se crean dos métodos un @BeforeEach y un @AfterEach
@BeforeEach
void setUp() {
utilitiesExecuteRule = mockStatic(UtilitiesExecuteRule.class);
}
@AfterEach
void afterTest() {
utilitiesExecuteRule.close();
}
Esto con el fin de que cada instancia de la clase estática mockeada, viva y muera en la clase Test que la esta utilizando.
3. Finalmente, se mockea un método de dicha clase de la siguiente forma:
utilitiesExecuteRule.when(
() -> UtilitiesExecuteRule.metodoAMockear(anyString(), anyString(), anyString())
).thenReturn(responseMockeadoDelMetodo);
Listo, eso es todo.
Espero que les haya servido.
0 comentarios :
Publicar un comentario