Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > PowerMock y métodos finales

Hola, buenas:

Estoy empleando Mockito y PowerMock para realizar un test, en apariencia simple, pero lo cierto es que se me atraganta. Es el siguiente:

package org.jomaveger.pruebamock;

import static org.junit.Assert.*;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.springframework.mock.web.MockHttpServletRequest;
import org.webmacro.servlet.WebContext;

@RunWith(PowerMockRunner.class)
@PrepareForTest({Request.class})
public class RequestTest {

@Test
public void checkGestorLoaderFicherosTest() {
WebContext mock = PowerMockito.mock(WebContext.class);
MockHttpServletRequest request = new MockHttpServletRequest();

request.addParameter(Constantes.ENTORNO, Constantes.PRODUCCION);
request.addParameter(Constantes.OPERACION_CTE_CMLU, Constantes.OPER_CARGAR);
request.addParameter(Constantes.TIPO_FICHERO, Constantes.XLS);

PowerMockito.when(mock.getRequest()).thenReturn(request);

final Request req = new Request();
assertTrue(req.checkGestorLoaderFicheros(mock));
}
}

El problema es que el método getRequest() de WebContext.class es final. Entonces, al ejecutar el test, en el momento de llegar al when, siempre obtengo el mismo error:

org.mockito.exceptions.misusing.MissingMethodInvocationException:
when() requires an argument which has to be 'a method call on a mock'.
For example:
when(mock.getArticles()).thenReturn(articles);

Also, this error might show up because:
1. you stub either of: final/private/equals()/hashCode() methods.
Those methods *cannot* be stubbed/verified.
Mocking methods declared on non-public parent classes is not supported.
2. inside when() you don't call method on mock but on some other object.

at org.jomaveger.pruebamock.RequestTest.checkGestorLoaderFicherosTest(RequestTest.java:26)

¡Pero se supone precisamente que PowerMock es precisamente para poder lidiar con métodos finales! Y también los estáticos y los privados. No debería suponer un problema ese método final de esa clase de WebMacro.

¿Alguien tiene alguna idea y podría echar un cable? Llevo tres días atascado con esto y no sé cómo resolverlo.

Muchas gracias de antemano y un saludo cordial,
José María

junio 9, 2020 | Registered Commenterjomaveger