Ich habe die folgende Klasse:Mocking nicht-öffentliche statische Methoden in abstrakten Klassen mit JMockit?
public abstract class AbstractParent {
static String method() {
return "OriginalOutput";
}
}
Ich möchte diese Methode verspotten. Ich entscheide mich für JMockit. So erstelle ich ein Mock-Klasse:
public class MockParent {
static String method() {
return "MOCK";
}
}
Und mein Test-Code sieht wie folgt aus:
public class RealParentTest {
@Before
public void setUp() throws Exception {
Mockit.redefineMethods(AbstractParent.class, MockParent.class);
}
@Test
public void testMethod() {
assertEquals(MockParent.method(),AbstractParent.method());
}
}
Leider sagt dieser Test, dass AbstractParent returns "OriginalOutput" statt "MOCK". Irgendwelche Ideen warum? Mache ich etwas falsch? Ich habe versucht, meine Scheinklasse als abstrakt zu erklären, ohne Erfolg.
Bearbeiten Beachten Sie, dass das Ausführen der Methode den Test ohne Problem ausführen lässt ... das ist seltsam, weil Sie mit JMockit in der Lage sind, Methoden beliebigen Umfangs zu verspotten.
Antwort Nur die Mock-Methode muss öffentlich sein, Sie können die ursprüngliche Methode beibehalten wie sie ist.
Nur für den passierenden googler..die akzeptierte Antwort ist jetzt veraltet, da Mockit.redefineMethods veraltet ist ... Ich versuche das richtige zu finden. –