PowerMock problema con un método extendido
Pregunta
Estoy intentando utilizar PowerMock burlarse un poco de código de terceros y estoy teniendo un problema con un método extendido.
Así que voy a dar un fragmento que muestra lo que está ocurriendo.
ClassA extends ClassB{
super();
}
ClassB extends ClassC{
super();
}
ClassC {
String methodA();
}
Ahora estoy tratando de burlarse claseA ya que es lo que mi código está utilizando. La maqueta crea bien, sin embargo cuando agrego una expectativa de este modo:
expect(mockClassA.methodA()).andReturn("string");
Me sale el siguiente error:
java.lang.IllegalStateException: falta de definición de comportamiento de la llamada al método anterior MethodA () en org.easymock.internal.MockInvocationHandler.invoke (MockInvocationHandler.java:43) en org.powermock.api.easymock.internal.invocationcontrol.EasyMockMethodInvocationControl.invoke (EasyMockMethodInvocationControl.java:95) en org.powermock.core.MockGateway.doMethodCall (MockGateway.java:104) en org.powermock.core.MockGateway.methodCall (MockGateway.java:167) en .ClassC.methodA (ClassC.java)
¿Alguna idea de lo que me falta? Sé que no he incluido muchos detalles, pero me he preparado para la prueba claseA usando la notación, también me he puesto solamente la repetición en un mismo lugar para asegurarse de que no estoy poniendo incorrectamente mockClassA en el estado equivocado antes de la expectativa.
Solución 2
La excepción que estaba haciendo era una consecuencia de las malas expectativas, más que nada que ver con la extensión de clase. Lo siento por la pregunta mis-establecidos.
Otros consejos
Me hizo algo como esto y funciona para mí, sin embargo yo no entiendo por qué necesita PowerMock aquí (se puede hacer eso sin que con EasyMock / Mockito).
@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassA.class)
public class ClassATest {
@Test
public void finalMethodString() throws Exception {
ClassA f = PowerMock.createNiceMock(ClassA.class);
EasyMock.expect(f.methodA()).andReturn("haha");
EasyMock.replay(f);
assertEquals("haha1", f.methodA());
}
}
class ClassA extends ClassB{
@Override
String methodA() {
return "1";
}
}
class ClassB extends ClassC{
@Override
String methodA() {
return "b";
}
}
class ClassC {
String methodA() {
return null;
}
}