如何在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?
答案 0 :(得分:6)
问题在于排序。
在您的测试中,Powermock首先创建$this->preCalculateFormulas
Child
,之后您要求他压制Spy
的方法。似乎此时为时已晚,因为Parent
实例已经创建。
如果您先拨打Child
,然后创建suppress
,则可以:
Child