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.

¿Fue útil?

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;
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top