PowerMock:来自父类的存根方法

jch*_*tel 18 java overriding stub super powermock

我正在使用PowerMock,我想知道如何保持子类的所有行为,但是存根super调用可能被子进程覆盖.

说我有这个班:

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

和一个子类:

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

如何将呼叫存根到super.someMethod()

我试过了

@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());
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*eve 6

您可以尝试抑制父类中的方法,

PowerMockito.suppress(methodsDeclaredIn(A.class));
Run Code Online (Sandbox Code Playgroud)

这是一篇关于 Stubbing、Suppressing 和 Replace with PowerMock 的文章,可能会有用。

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


Kei*_*ith 1

您尝试的演员阵容不会按您的预期工作。不过,我认为您有几个选择可以解决这个问题,当然可以使用 PowerMockito。

看看这个StackOverflow 答案