PowerMock:如何在Spy上禁止父方法?

时间:2015-11-04 17:43:12

标签: java mockito powermock powermockito

如何在Spy上正确抑制父类方法?

如果我有一个班级家长:

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对象的声明中删除@Spy注释,则Parent.method()被正确抑制。

我做错了吗?我是否误解了如何使用PowerMock?

1 个答案:

答案 0 :(得分:6)

问题在于排序。

在您的测试中,Powermock首先创建$this->preCalculateFormulas Child,之后您要求他压制Spy的方法。似乎此时为时已晚,因为Parent实例已经创建。

如果您先拨打Child,然后创建suppress,则可以:

Child