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
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