problema PowerMock con un metodo esteso
Domanda
Sto tentando di usare PowerMock prendere in giro un po 'di codice di terze parti e sto avendo un problema con un metodo esteso.
Quindi, io darò un frammento che mostra ciò che è in corso.
ClassA extends ClassB{
super();
}
ClassB extends ClassC{
super();
}
ClassC {
String methodA();
}
Ora sto cercando di deridere ClasseA come questo è ciò che sta usando il mio codice. Il finto crea bene, però quando aggiungo un'aspettativa in questo modo:
expect(mockClassA.methodA()).andReturn("string");
ottengo il seguente errore:
java.lang.IllegalStateException: definizione comportamento mancante per il metodo precedente chiamata MethodA () a org.easymock.internal.MockInvocationHandler.invoke (MockInvocationHandler.java:43) a org.powermock.api.easymock.internal.invocationcontrol.EasyMockMethodInvocationControl.invoke (EasyMockMethodInvocationControl.java:95) a org.powermock.core.MockGateway.doMethodCall (MockGateway.java:104) a org.powermock.core.MockGateway.methodCall (MockGateway.java:167) a .ClassC.methodA (ClassC.java)
Ogni pensiero su che cosa manco? So che non ho incluso molti dettagli, ma ho preparato ClasseA per test utilizzando la notazione, ho anche solo mettere il replay in un unico luogo per assicurarsi che non sto mettendo in modo non corretto mockClassA nello stato sbagliato prima di impostare l'aspettativa.
Soluzione 2
L'eccezione mi è stato sempre è stato il risultato di cattive aspettative piuttosto che nulla a che fare con l'estensione di classe. Scusate per la domanda mis-dichiarati.
Altri suggerimenti
Ho fatto qualcosa di simile e funziona per me, ma io non capisco perché avete bisogno di PowerMock qui (si può fare a meno 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;
}
}