【问题标题】:PowerMock: stub methods from parent classPowerMock:来自父类的存根方法
【发布时间】:2015-12-21 07:41:56
【问题描述】:

我正在使用 PowerMock,我想知道如何保留子类的所有行为,但存根 super 调用可能会被子类覆盖。

假设我有这门课:

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

还有一个子类:

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

如何将呼叫存根到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());
}

【问题讨论】:

标签: java overriding powermock super stub


【解决方案1】:

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

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

这是一篇关于 Stubbing, suppressing and Replace with PowerMock 的文章,可能会有一些用处。

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

【讨论】:

  • suppress 方法没有帮助,因为我需要返回一个模拟值。不过谢谢。
  • 如何使用 PowerMockito.replace() 将 parent 方法替换为返回模拟值的方法?
【解决方案2】:

不要忘记在您的测试类中添加@PrepareForTest({ParentClassToSupress.class})。然后你可以按照史蒂夫的建议做并抑制父级中的方法:PowerMockito.suppress(methodsDeclaredIn(ParentClassToSupress.class));

【讨论】:

    【解决方案3】:

    您尝试的演员阵容不会像您预期的那样工作。然而,我认为你有几个选择来解决这个问题,当然是 PowerMockito。

    看看这个StackOverflow answer

    【讨论】:

    • 是的,所以我非常努力地寻找解决方案,因为 PowerMock 的重点是您不必更改代码的结构以使其可测试。但是,我意识到我需要在编写测试所花费的时间和精力之间取得平衡,因此我修改了代码以使其更易于测试。但是感谢您的资源!
    猜你喜欢
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    相关资源
    最近更新 更多