PowerMock:如何在 Spy 上抑制 parent 方法?

PowerMock: how to suppress parent methods on a Spy?

如何正确抑制 Spy 上的 parent class 方法?

如果我有 class Parent:

public class Parent {
    public void method() {
    System.out.println("Parent.method");
    }
}

class Child extends Parent {
@Override
    public void method() {
        super.method();
        System.out.println("Child.method");
    }
}

我用下面的代码测试:

@RunWith(PowerMockRunner.class)
@PrepareForTest(Parent.class)
public class SuppressParentTest {
   @Spy Child child = new Child();

   @Test
   public void testSuppressSuperclassMethods() {
       PowerMockito.suppress(methodsDeclaredIn(Parent.class));
       child.method();
   }

我从 System.out 得到以下打印输出:

Parent.method
Child.method

而我应该只得到 Child.method.

的打印输出

有趣的是,如果我从 Child object 的声明中删除 @Spy 注释,那么 Parent.method() 会被正确抑制。

我是不是做错了什么?我是否误解了如何使用 PowerMock?

顺序问题。

在您的测试中,Powermock 首先创建 Child Spy,然后您要求他抑制 Parent 的方法。似乎为时已晚,因为 Child 实例已经创建。

如果您先调用 suppress 然后创建 Child,它会起作用:

@Test
public void testSuppressSuperclassMethods() {
    PowerMockito.suppress(MemberMatcher.methodsDeclaredIn(Parent.class));
    Child child = spy(Child.class);
    child.method();
}