Frage

Ich versuchen PowerMock zu verwenden, um einige Codes von Drittanbietern zu verspotten und ich habe ein Problem mit einem erweiterten Verfahren.

So will ich einen kurzen Ausschnitt geben zu zeigen, was auftritt ist.

ClassA extends ClassB{
     super();
}

ClassB extends ClassC{
     super();
}

ClassC {
     String methodA();
}

Jetzt bin ich versucht, KlasseA zu verspotten, wie das ist, was mein Code verwendet. Die mock schafft Ordnung, aber wenn ich eine Erwartung hinzufügen wie folgt:

expect(mockClassA.methodA()).andReturn("string");

ich die folgende Fehlermeldung erhalten:

  

java.lang.IllegalStateException: fehlende Verhaltensdefinition für den vorhergehenden Methodenaufruf methodA ()    bei org.easymock.internal.MockInvocationHandler.invoke (MockInvocationHandler.java:43)    bei org.powermock.api.easymock.internal.invocationcontrol.EasyMockMethodInvocationControl.invoke (EasyMockMethodInvocationControl.java:95)    bei org.powermock.core.MockGateway.doMethodCall (MockGateway.java:104)    bei org.powermock.core.MockGateway.methodCall (MockGateway.java:167)    bei .ClassC.methodA (ClassC.java)

Alle Gedanken auf, was mir fehlt? Ich weiß, ich habe nicht viel Detail enthalten, aber ich habe KlasseA für Tests unter Verwendung der Notation vorbereitet, ich habe auch nur die Wiedergabe an einem Ort, um sicherzustellen, dass ich nicht falsch mockClassA in den falschen Zustand gebracht wird, bevor die Erwartung zu setzen.

War es hilfreich?

Lösung 2

Die Ausnahme war ich immer war eine Folge der schlechten Erwartungen eher als alles, was mit der Klassenerweiterung zu tun. Sorry für die Fehl angegeben Frage.

Andere Tipps

Ich habe so etwas wie dieses und es funktioniert für mich aber nicht, daß ich verstehe, warum Sie PowerMock brauchen hier (Sie, dass mit EasyMock / Mockito ohne es tun kann).

@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;
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top