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.

È stato utile?

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;
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top