webentwicklung-frage-antwort-db.com.de

PowerMock: Stub-Methoden aus der übergeordneten Klasse

Ich verwende PowerMock, und ich würde gerne wissen, wie man das gesamte Verhalten der Kindklasse beibehält, aber Stub super-Aufrufe, die vom Kind möglicherweise überschrieben werden.

Angenommen, ich habe diese Klasse:

public class A {
    public String someMethod() {
        return "I don't want to see this value";
    }
}

und eine Unterklasse:

public class B extends A {
    @Override
    public String someMethod() {
        return super.someMethod() + ", but I want to see this one";
    }
}

Wie stelle ich den Anruf an super.someMethod()?

Ich habe es versucht

@Test
public void test() {
    B spy = PowerMockito.spy(new B());
    PowerMockito.doReturn("value").when((A)spy).someMethod();

    assertEquals("value, but I want to see this one", spi.someMethod());
}
18
jchitel

Vergessen Sie nicht, @PrepareForTest({ParentClassToSupress.class}) in Ihrer Testklasse hinzuzufügen. Dann können Sie die von Steve vorgeschlagenen Methoden ausführen und Methoden im übergeordneten Element unterdrücken: PowerMockito.suppress(methodsDeclaredIn(ParentClassToSupress.class));

2
DustinB

Sie können versuchen, die Methoden aus der Parent-Klasse zu unterdrücken.

PowerMockito.suppress(methodsDeclaredIn(A.class));

Hier ist ein Artikel über Stubbing, Unterdrücken und Ersetzen mit PowerMock, der von Nutzen sein kann.

https://www.jayway.com/2013/03/05/beyond-mocking-with-powermock/

2
Steve

Die Besetzung, die Sie versuchen, funktioniert nicht wie erwartet. Ich denke jedoch, dass Sie einige Optionen haben, um dies zu umgehen, sicherlich mit PowerMockito. 

Schauen Sie sich diese StackOverflow-Antwort an.

1
Keith